找回密码
 立即注册

QQ登录

只需一步,快速开始

打印 上一主题 下一主题
开启左侧

[M051] 新唐最新的MDK插件真心好用

[复制链接]
跳转到指定楼层
楼主
harvardx 发表于 2016-3-5 17:18:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题, 系统内部的pwm受外接的HMI或者PC控制. 通过一定的数据协议,如果modbus 或者某种简单的串口通信协议.

控制端,将要修改的参数, 频率或者占空比传递过来,  如何来实现数据的刷新,并且实时更新这些参数到pwm的输出波形呢

最简单的一个思路,  定义2组变量, 对于同一个控制参数,如频率, 有2个变量对应, 一个是now 一个是last,

在程序循环中,不断的比较now和last的关系, 如不同,则发生变化, 则进行一次数据更新行为, 并且讲最新的参数更新到pwm发生器,从而体现在输出波形上;

于是构造如下函数:


  • /*
  • ** pwm是否需要更新,比较上一次的频率和脉宽值,如果不同,则更新
  • */
  • void pwm_update_loop( void )
  • {
  •     /*1,第一路判断: 频率 或 占空比发生变化 */
  •     if( (HLM_SOKO_I_FREQ != HLM_SOKO_I_FREQ_LAST ) ||
  •          HLM_SOKO_I_DUTY != HLM_SOKO_I_DUTY_LAST   )
  •     {
  •         /* 更新 频率和占空比的记录值 */
  •         HLM_SOKO_I_FREQ_LAST = HLM_SOKO_I_FREQ;
  •         HLM_SOKO_I_DUTY_LAST = HLM_SOKO_I_DUTY;
  •         /* 更新当前通道的PWM波形 */
  •         pwm_update( PWM_I,HLM_SOKO_I_FREQ, HLM_SOKO_I_DUTY );
  •     }
  •     /*2,第二路判断 */
  •     if( (HLM_SOKO_II_FREQ != HLM_SOKO_II_FREQ_LAST ) ||
  •          HLM_SOKO_II_DUTY != HLM_SOKO_II_DUTY_LAST   )
  •     {
  •         /* 更新 频率和占空比的记录值 */
  •         HLM_SOKO_II_FREQ_LAST = HLM_SOKO_II_FREQ;
  •         HLM_SOKO_II_DUTY_LAST = HLM_SOKO_II_DUTY;
  •         /* 更新当前通道的PWM波形 */
  •         pwm_update( PWM_II,HLM_SOKO_II_FREQ, HLM_SOKO_II_DUTY );
  •     }
  •     /*3,第三路判断 */
  •     if( (HLM_SOKO_III_FREQ != HLM_SOKO_III_FREQ_LAST ) ||
  •          HLM_SOKO_III_DUTY != HLM_SOKO_III_DUTY_LAST   )
  •     {
  •         /* 更新 频率和占空比的记录值 */
  •         HLM_SOKO_III_FREQ_LAST = HLM_SOKO_III_FREQ;
  •         HLM_SOKO_III_DUTY_LAST = HLM_SOKO_III_DUTY;
  •         /* 更新当前通道的PWM波形 */
  •         pwm_update( PWM_III,HLM_SOKO_III_FREQ, HLM_SOKO_III_DUTY );
  •     }
  • }

[color=rgb(51, 102, 153) !important]复制代码

如图,该函数作为系统的loop循环工作函数之一,不断的被调用,但是,有新的控制值过来时,只会更新一次,之后就保持不变了.仅作数据的last和now的比较判断..
夜深了 ... good night.
maybe should say: Morning
  •      while(1)
  •         {
  •         /*1- 看门狗 */
  •         wdt_reset();
  •         /*2 - 通信响应,接收命令 */
  •         mod_process();
  •         /*3-  收到命令,进行波形输出 */
  •         //考虑到波形实时性要求,本函数安排在定时器
  •         //中断中,为保证输出的调制波与800hz的基波匹配
  •         //中断的溢出频率与基波的频率保持一直,
  •         //recipe_out();
  •         /*4- 处方的基波频率和占空比(脉宽控制 ) */
  •         pwm_update_loop();
  •         /* 5 -系统软定时器响应 */
  •         on_timer();
  •     }
已经mdk中调试通过. 利用在线调试, 无需外接通信,即可模拟,首先在view菜单下,

把这勾上:



把需要观察的变量都 添加到watch,然后全速运行,双击要修改的值,然后修改,按回车,原来的频率为800hz, 新值为1000


最后看,经过算法运行之后,数值发生变化,last和now都变成了1000hz,示波器观察,确实变了




最重要的是, 整个过程mdk实在全速运行,不需要停下


来, 这时候, MDK调试平台,化作一个最高效直接的

PWM发生器,直接键盘操作,


就可以改变pwm的频率和占空比..



${3~MVA[V~BB)K_}HA8FBU6.png (137.74 KB, 下载次数: 0)








[url=http://atmel.eefocus.com/module/forum/thread-68-1-1.html][/url]
懒得上传 图片 重新发帖了 ,直接把自己发表的东西粘贴过来了 见谅..
NuTool-PinConfig_Rev.1.08.zip (5.89 MB, 下载次数: 839)

Nu-Link_Keil_Driver 1.31.6535.part01.rar (2 MB, 下载次数: 1491)

Nu-Link_Keil_Driver 1.31.6535.part02.rar (2 MB, 下载次数: 1418)

Nu-Link_Keil_Driver 1.31.6535.part03.rar (2 MB, 下载次数: 1425)

Nu-Link_Keil_Driver 1.31.6535.part04.rar (2 MB, 下载次数: 1454)

Nu-Link_Keil_Driver 1.31.6535.part05.rar (2 MB, 下载次数: 1470)

Nu-Link_Keil_Driver 1.31.6535.part06.rar (2 MB, 下载次数: 1417)

Nu-Link_Keil_Driver 1.31.6535.part07.rar (2 MB, 下载次数: 1383)

Nu-Link_Keil_Driver 1.31.6535.part08.rar (2 MB, 下载次数: 1394)

Nu-Link_Keil_Driver 1.31.6535.part09.rar (2 MB, 下载次数: 1435)

Nu-Link_Keil_Driver 1.31.6535.part10.rar (2 MB, 下载次数: 1451)

Nu-Link_Keil_Driver 1.31.6535.part11.rar (1.77 MB, 下载次数: 1406)



























分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 顶1 踩
回复

使用道具 举报

沙发
初学者_123 发表于 2016-4-19 15:34:52 | 只看该作者
GOOD!
回复

使用道具 举报

板凳
 楼主| harvardx 发表于 2016-4-19 21:19:35 | 只看该作者
希望能够帮到需要的同学
回复 支持 反对

使用道具 举报

地板
 楼主| harvardx 发表于 2016-4-21 12:29:58 | 只看该作者
谢谢版主加精
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU