国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

 找回密碼
 注冊
搜索

Proteus仿真STM32407ZGT6 PWM多路可變頻率可調(diào)占空比輸出

[復(fù)制鏈接]
樓主
路漫漫 發(fā)表于 2020-5-24 03:00:13 | 只看該作者 |只看大圖 |倒序?yàn)g覽 |閱讀模式
一,打開文件(可以隨文下載放置在文檔中打開)。(如下圖1所示)
Proteus仿真STM32407ZGT6 PWM多路可變頻率可調(diào)占空比輸出 202336sadk43uap9ear9a9.png

圖1
  
二,調(diào)整虛擬器件,另存工程文件。(如下圖2,3,4所示)
Proteus仿真STM32407ZGT6 PWM多路可變頻率可調(diào)占空比輸出 202336vmggpw0p30e7gmgt.png

圖2
  
Proteus仿真STM32407ZGT6 PWM多路可變頻率可調(diào)占空比輸出 202336kggj8vv8zj8yj5t5.png

圖3
  
Proteus仿真STM32407ZGT6 PWM多路可變頻率可調(diào)占空比輸出 202337f63u691otzm6b4z6.png
圖4
  
三,點(diǎn)擊Source Code標(biāo)簽。(如下圖5所示)
Proteus仿真STM32407ZGT6 PWM多路可變頻率可調(diào)占空比輸出 202337eshvh3zn6zni3n9e.png
圖5
  
四,編輯main.c,timer.c,timer.h, key.c,key.h, led.c,led.h 代碼如Proteus8.9 仿真STM32407ZGT6系列001(如下圖6所示)
Proteus仿真STM32407ZGT6 PWM多路可變頻率可調(diào)占空比輸出 202337e6sikzkyfs706hhy.png
圖6

五,Main.c 代碼:
  1. /* Main.c file  generated by New Project wizard
  2.   
  3. * Author:   Ziegler Yin
  4.   
  5. *  Created:   周四 一月 16 2020
  6.   
  7. *  Processor: STM32F407ZGT6ZGT6
  8.   
  9. *  Compiler:  GCC for ARM
  10.   
  11. */
  12.   
  13.   
  14. #include  "mfuncs.h"
  15.   
  16. #include  "delay.h"
  17.   
  18. #include  "usart.h"
  19.   
  20. #include  "led.h"
  21.   
  22. #include  "key.h"
  23.   
  24. #include  "timer.h"
  25.   
  26.   
  27. #define RT(A ,  B) (A> 300)?  (B= 0):  (B=1)
  28.   
  29.   
  30. uint32_t  gt_fig(u8 sts){
  31.   
  32.       if(1== sts) return  TIM_GetCapture1(TIM4);
  33.   
  34.       if(2== sts) return TIM_GetCapture2(TIM4);
  35.   
  36.       if(3== sts) return  TIM_GetCapture3(TIM4);
  37.   
  38.       if(4== sts) return  TIM_GetCapture4(TIM4);
  39.   
  40. }
  41.   
  42.   
  43. void st_fig(u8  sts, uint32_t gt){
  44.   
  45.       if(1== sts) TIM_SetCompare1(TIM4, gt);
  46.   
  47.       if(2== sts) TIM_SetCompare2(TIM4, gt);
  48.   
  49.       if(3== sts) TIM_SetCompare3(TIM4, gt);
  50.   
  51.       if(4== sts) TIM_SetCompare4(TIM4, gt);
  52.   
  53. }
  54.   
  55.   
  56. void  new_Pwm(u16 *tmbuf, u16 * mdc) {
  57.   
  58.       Pwm_Init(*(tmbuf+0), *(tmbuf+1));
  59.   
  60.       TIM_SetCompare1(TIM4, mdc[0]);
  61.   
  62.       TIM_SetCompare2(TIM4, mdc[1]);
  63.   
  64.       TIM_SetCompare3(TIM4, mdc[2]);
  65.   
  66.   
  67.       Pwm_Init3(*(tmbuf+2), *(tmbuf+3));
  68.   
  69.       TIM_SetCompare2(TIM3, mdc[1]);
  70.   
  71. }
  72.   
  73.   
  74. int main(void)
  75.   
  76. {
  77.   
  78.       u16 psc=840, per=600, idc[4]= {500, 200,  300, 400};
  79.   
  80.       u16 umd, pwmval=0, tm43[2][2]= {840,  600, 1680, 1200};   
  81.   
  82.       u8 status= 0, dir= 1, chgFry[1]= {0, 0};
  83.   
  84.       int gtln= 0;
  85.   
  86.       char *wd, *wds, *lnslt[7]={"未選", "A線路", "B線路", "C線路", "D線路", "變頻1-A,B,C倍頻或初始狀態(tài)", "變頻2-D四倍頻或初始狀態(tài)"};
  87.   
  88.       NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置系統(tǒng)中斷優(yōu)先級(jí)分組2
  89.   
  90.       delay_init(168);  //初始化延時(shí)函數(shù)
  91.   
  92.       uart_init(9600);//初始化串口波特率為115200
  93.   
  94.      LED_Init();
  95.   
  96.      KEY_Init();
  97.   
  98.       uprint("大家好!!!\r\n");
  99.   
  100.       uprint("大家來造呼吸機(jī)-----。\r\n");
  101.   
  102.                  gtln= nmtoa(wd, 10, psc);
  103.   
  104.                  uprint(wd);  uprint("\r\n");
  105.   
  106.                  gtln= nmtoa(wd, 10,  (psc+10000));
  107.   
  108.                  uprint(wd);  uprint("\r\n");
  109.   
  110.   
  111.       LED0= LED1= LED2= 1;
  112.   
  113.   
  114.       chgFry[0]= 0;   
  115.   
  116.       chgFry[1]= 4;
  117.   
  118.       new_Pwm(tm43, idc);   
  119.   
  120.   
  121.       uprint("控制芯片STM32F407ZGT6_008_PWM仿真開始了。\r\n");
  122.   
  123.      delay_ms(100);   
  124.   
  125.   
  126.     while(1)
  127.   
  128.       {
  129.   
  130.           wd= lnslt[status]; ;
  131.   
  132.            uprint("Arm運(yùn)行時(shí)......占空比:\r\n");  
  133.   
  134.            uprint(wd);
  135.   
  136.            uprint("線路可調(diào)整狀態(tài):\r\n");
  137.   
  138.            if(1==ReadKey(GPIOC, 0x0080)) {
  139.   
  140.                  status++;  
  141.   
  142.              delay_ms(20);
  143.   
  144.                  if(status> 6) status= 0;
  145.   
  146.                  wd= lnslt[status]; ;
  147.   
  148.                  uprint("線路調(diào)整狀態(tài)......占空比");  
  149.   
  150.                  uprint(wd);
  151.   
  152.                  uprint("線路可調(diào)整狀態(tài):\r\n");
  153.   
  154.            }
  155.   
  156.            if(1==ReadKey(GPIOC, 0x0010)) {
  157.   
  158.                  LED0= 1;   
  159.   
  160.                  pwmval= gt_fig(status);
  161.   
  162.                  gtln= nmtoa(wds, 10, pwmval);
  163.   
  164.                  if(status>0){
  165.   
  166.                        if(per< (pwmval+ 50)) {                           
  167.   
  168.                                   uprint("線路調(diào)整, 占空值到達(dá)最高值  ......\r\n");
  169.   
  170.                                   st_fig(status,  (per+ 1));
  171.   
  172.                       }
  173.   
  174.                       else{
  175.   
  176.                             LED0= 1;
  177.   
  178.                             pwmval=  gt_fig(status);
  179.   
  180.                             gtln= nmtoa(wds,  10, pwmval);
  181.   
  182.                             umd= pwmval +50;
  183.   
  184.                             uprint("線路調(diào)整, 占空值由  ");
  185.   
  186.                             uprint(wds);
  187.   
  188.                             uprint(" 增加50 至");
  189.   
  190.                             uprint(numtoa(10,  umd));
  191.   
  192.                             uprint("  ...\r\n ");
  193.   
  194.                             st_fig(status,  umd);
  195.   
  196.                       }
  197.   
  198.                  }
  199.   
  200.            }
  201.   
  202.            if(1==ReadKey(GPIOC, 0x0020)) {
  203.   
  204.                  LED1= 1;   
  205.   
  206.                  if(status==5) {
  207.   
  208.                       if(chgFry[0]==0) {
  209.   
  210.                             chgFry[0]= 2;
  211.   
  212.                             tm43[0][0]= 1680;
  213.   
  214.                             new_Pwm(tm43,  idc);   
  215.   
  216.                             uprint("線路A,B,C頻率調(diào)整到倍頻...\r\n");
  217.   
  218.                             delay_ms(200);
  219.   
  220.                       }
  221.   
  222.                       else{
  223.   
  224.                             chgFry[0]= 0;
  225.   
  226.                             tm43[0][0]= 840;
  227.   
  228.                             new_Pwm(tm43,  idc);   
  229.   
  230.                             uprint("線路A,B,C頻率調(diào)整到初始狀態(tài)...\r\n");
  231.   
  232.                             delay_ms(200);
  233.   
  234.                       }
  235.   
  236.                  }
  237.   
  238.                  if(status==6) {
  239.   
  240.                       if(chgFry[1]==0) {
  241.   
  242.                             chgFry[1]= 4;
  243.   
  244.                             tm43[1][0]= 1680;  tm43[1][1]= 1200;
  245.   
  246.                             new_Pwm(tm43,  idc);   
  247.   
  248.                             uprint("線路D頻率調(diào)整到四倍頻...\r\n");
  249.   
  250.                             delay_ms(200);
  251.   
  252.                       }
  253.   
  254.                       else{
  255.   
  256.                             chgFry[1]= 0;
  257.   
  258.                             tm43[1][0]= 840;  tm43[1][1]= 600;
  259.   
  260.                             new_Pwm(tm43,  idc);   
  261.   
  262.                             uprint("線路D頻率調(diào)整到初始狀態(tài)...\r\n");
  263.   
  264.                             delay_ms(200);
  265.   
  266.                       }
  267.   
  268.                  }
  269.   
  270.               delay_ms(20);
  271.   
  272.                  pwmval= gt_fig(status);
  273.   
  274.                  gtln= nmtoa(wds, 10, pwmval);
  275.   
  276.                  uprint("Arm運(yùn)行時(shí)......占空比");  
  277.   
  278.                  uprint(wd);
  279.   
  280.                  uprint("線路調(diào)整, 由  ");
  281.   
  282.                  uprint(wds);
  283.   
  284.                  uprint(" 清零 ");
  285.   
  286.                  uprint(" ...\r\n  ");
  287.   
  288.                  st_fig(status, 0);
  289.   
  290.            }
  291.   
  292.            if(1==ReadKey(GPIOC, 0x0040)) {
  293.   
  294.                  LED2= 1;
  295.   
  296.                  pwmval= gt_fig(status);
  297.   
  298.                  gtln= nmtoa(wds, 10, pwmval);
  299.   
  300.                  if(pwmval> 50) {
  301.   
  302.                  umd= pwmval -50;
  303.   
  304.                  uprint("線路調(diào)整, 占空值由  ");
  305.   
  306.                  uprint(wds);
  307.   
  308.                  uprint(" 減少50 至  ");
  309.   
  310.                  uprint(numtoa(10,  umd));
  311.   
  312.                  uprint(" ...\r\n  ");
  313.   
  314.                  st_fig(status, umd);
  315.   
  316.                  }
  317.   
  318.                  else {
  319.   
  320.                       umd= 1;
  321.   
  322.                       uprint("線路調(diào)整, 占空值到達(dá)最低值  ......\r\n");
  323.   
  324.                       st_fig(status, 1);
  325.   
  326.                  }
  327.   
  328.            }
  329.   
  330.            LED0= LED1= LED2= 0;
  331.   
  332.           delay_ms(100);  
  333.   
  334.       }
  335.   
  336. }
  337.   
復(fù)制代碼

key.c,key.h,  led.c led.h,time.c,time.h之前的代碼都可借鑒,不在多列,以后不再一一羅列,只列main.c 與相關(guān)功能的.c, .h代碼。
   
六,點(diǎn)擊構(gòu)建工程按鈕,編譯工程。(如下圖7所示)
Proteus仿真STM32407ZGT6 PWM多路可變頻率可調(diào)占空比輸出 202338lakfu7aamef7kra0.png

圖7

七,點(diǎn)擊窗口左下方仿真按鈕,可見紅,黃,綠燈點(diǎn)亮后一會(huì)滅,仿真開始,按下SELECT按鈕,選擇"變頻1-A,B,C倍頻或初始狀態(tài)", "變頻2-D四倍頻或初始狀態(tài)",按下按下KEY_ZERO按鈕,倍頻, 四倍頻或初始狀態(tài)。占空比的調(diào)試,參見:博主的Proteus8.9 仿真STM32407ZGT6系列009_PWM多路可調(diào)占空比輸出文。虛擬串口,示波器將的狀態(tài)變化顯示在屏。 (如下圖8,9,10,11所示)

Proteus仿真STM32407ZGT6 PWM多路可變頻率可調(diào)占空比輸出 202338qu4ocq717c1qqqeq.png

圖8
  
Proteus仿真STM32407ZGT6 PWM多路可變頻率可調(diào)占空比輸出 202339vkzbclcak2kflo22.png
  
  
圖9
Proteus仿真STM32407ZGT6 PWM多路可變頻率可調(diào)占空比輸出 202340ygsis1h26db6hgyb.png

圖10
  
Proteus仿真STM32407ZGT6 PWM多路可變頻率可調(diào)占空比輸出 202340t11uo0lckkhi4l16.png
圖11
   
八,選擇release,點(diǎn)擊構(gòu)建工程按鈕,編譯工程生成Hex文件。(如下圖12所示)
Proteus仿真STM32407ZGT6 PWM多路可變頻率可調(diào)占空比輸出 202341ouedrcqr105pz3ux.png
圖12
  
九, 系列的001-003虛擬仿真與開發(fā)板對應(yīng)已證明:虛擬仿真程序?qū)τ陂_發(fā)板有效,之后不再&#10133;上下載到開發(fā)板的介紹。
   
附件在已安裝Proteus8.9的計(jì)算機(jī)文件夾中打開即可
PWM多路可變頻率可調(diào)占空比輸出仿真文件.rar (366.48 KB, 售價(jià): 1 E幣)
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則

手機(jī)版|小黑屋|ELEOK |網(wǎng)站地圖

GMT+8, 2026-5-26 04:56

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回復(fù) 返回頂部 返回列表