[应用方案] 身边的新塘 + 基于新唐M051的多功能理疗仪设计

[复制链接]
2138|18
 楼主| Harvard 发表于 2017-4-28 16:17 | 显示全部楼层 |阅读模式
本帖最后由 Harvard 于 2017-4-28 16:48 编辑


  1. 1, 目标:

    根据客户需求,设计一款具有彩屏界面的理疗仪. 主要有热敷,振动,激光. 快速设定按钮和单项调节按键共计10多个按钮. 带双色工作指示灯. 具备总线输出治疗方式 ,接智能探头; 亦有常规控制探头,由单片机
控制电机的启停, 恒温控制,激光功率调节等;


2, 选用新唐M0的原因: 个人对新唐单片机,尤其是M0单片机有着深刻的应用经验,在抛弃avr后, 新唐M0这一继任者.完全有过之而无不及. 非站台背书,是个人使用的感觉和产品实际运行结果确实如此. avr市面充斥翻新货,新货megaxxA系列也因为新的降成本的制程而没有当年的avr的风采. 而新唐M0 .2.5-5.5v的设计确实非常讨喜.  兼容51的操作方式.让我们这些只会玩玩8051 或者8位机的人,上手很快.  最简单的例子.要操作一个IO.
  8051:  sbit CLK = P1^1;  CLK =1;
  avr:    PORTA |=(1<<0);
M0 :  #define CLK P11     CLK =1;

  可以看出,新唐软件库里面也做了大量的工作,比友商的cortexM操作某个io方便多了 ,  让习惯了 8051或者8位机的工程师,可以方便的切换到M0 .
     软件问题解决,其实硬件设计也是非常简单, 新唐配备了Nucad和Nutool-pinconfig,还有pinview
1, pinconfig  可以让你非常简单的去分配复用的io ,然我们随时了解,那些io这样用没有问题. 串口是映射在哪个io , 等等.
2. 配置完了以后,会自动产生出引脚的配置代码.
3, 还不止, 可以通过自动调用nucad ,自动生成sch或者orcad的原理图...
4,这些配置到底对不对呢? 不放心的画 ,可以用个对应mcu的sdk板,比如大新塘送了很多年的M051开发板.直接把刚才的配置代码编译后 ,利用mdk 在线调试 然后在debug菜单下,就可以利用打开pinview
2LW1SN3TX}KTTY6~[]]27RK.png


(15)@CAN0JIKP5Z`D`0T(7V.png
图中,可以轻松看到串口的波特率 ,模拟量输入在那个脚. 非常直观.全球仅此一家.哈哈 夸张了. 确实简单实用.
      原理图如下. 3路pwm.一路控温, 一路输出给激光器 ,调节强度; 一路pwm调节电机的速度;

HJB)BU$_H4D]RE@3CNSAV%H.png

3,主程序

  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /* MAIN function                                                                                           */
  3. /*---------------------------------------------------------------------------------------------------------*/
  4. int main(void)
  5. {
  6.        
  7.     /** 1-BSP系统初始化 */
  8.     SYS_Init();
  9.     GPIO_Init();
  10.     P20 =0;
  11.     P21=0;
  12.     P22=1;
  13.     /* 2- 蜂鸣器和led测试 */
  14.     BUZZER =1;_delay_ms(10);
  15.     BUZZER =0;_delay_ms(10);
  16.     BUZZER =1;_delay_ms(10);
  17.     BUZZER =0;


  18.      

  19.     /** 2-应用程序系统初始化*/

  20.         /* 关全局中断 便于初始化单片机 */
  21.         cli();
  22.         /* 定时器初始化 */
  23.     TMR0_Init();
  24.     TMR1_Init();
  25.     TMR2_Init();
  26.     TMR3_Init();
  27.    
  28.     /* 开全局中断 结束初始化 */
  29.     sei();
  30.    
  31.     /* pwm初始化 */
  32.     pwm_init();
  33.     /* adc初始化 */
  34.     ADC_initial();


  35.     /* dgus波特率设置 */
  36.     usart1_init(4800);

  37.     /** 带通信功能则初始化串口*/
  38.     usart_init( 4800  );
  39.     usart_en_recv( );
  40.      
  41.     /* 测试代码 */
  42.     BUZZER =0;
  43.     LED_WAIT = LED_OFF; LED_WORK =LED_OFF;



  44.     /* 应用程序初始化 : */
  45.     /* 1- 上电后,显示**画面 */
  46.     menu_show(SYS_menu_index);
  47.     /* 2-关闭所有的pwm输出 */
  48.     pwm_update(0,0);
  49.     pwm_update(1,0);
  50.     pwm_update(2,0);
  51.     /* 开始系统倒计时 */
  52.     set_on_timer(TMR0,0,60,timer0_timeout);  
  53.    

  54.    
  55.    
  56.     /* 主循环 */
  57.      while(1)
  58.         {

  59.         /*0 - 按键扫描,处理 */
  60.         keyscan();
  61.         KeyProcess();
  62.         
  63.                 /*1- 看门狗 */
  64.                 wdt_reset();
  65.         /*2- dgus处理 */
  66.         //dgus_process();
  67.         /*3- dgus界面刷新 */
  68.         dgus_show_update();
  69.                
  70.         /*4 - 周期性的控制程序 */
  71.         if(f200ms)
  72.         {
  73.             f200ms = false;
  74.             
  75.         }
  76.         /* 5- 温度控制程序 */
  77.         temperatue_proc();
  78.          
  79.         /* 6- 软件定时器响应 */
  80.                         on_timer();

  81.         /* 7- pwm更新处理  */
  82.                 pwm_update_loop();
  83.         
  84.         
  85.         
  86.     }


  87.    
  88.    
  89.    
  90.    

  91. }

4 pwm 初始化程序

  1. /**
  2. * [url=home.php?mod=space&uid=247401]@brief[/url]      初始化pwm,设定两路方波所在的pwm的最小脉宽
  3. *
  4. * @param[in]  
  5. *
  6. * [url=home.php?mod=space&uid=266161]@return[/url]      
  7. *
  8. * [url=home.php?mod=space&uid=1543424]@Details[/url]    利用BSP库的功能,初始化M051内部的PWM模块
  9. *             当前2个pwm引脚为: P24 ,P25,P26,P27
  10. */
  11. void pwm_init( void )
  12. {
  13.     /* 1- 设定P2.5引脚用于PWM5 输出.
  14.     *     设定引脚P42用于PWM2  
  15.     */
  16.      SYS_UnlockReg();
  17.      
  18.      /* Enable PWM module clock */
  19.     CLK_EnableModuleClock(PWM01_MODULE);
  20.     CLK_EnableModuleClock(PWM23_MODULE);


  21.     /* Select PWM module clock source:改为外部晶振,可以得到准确的频率 :22MHZ */
  22.     CLK_SetModuleClock(PWM01_MODULE, CLK_CLKSEL1_PWM01_S_HIRC, 0);
  23.     CLK_SetModuleClock(PWM23_MODULE, CLK_CLKSEL1_PWM23_S_HIRC, 0);
  24.    
  25.    

  26.     /* Reset PWMA channel4~channel7 */
  27.     SYS_ResetModule(PWM03_RST);  
  28.    
  29.     /* 设定各个pwm所在端口  */
  30.     SYS->P2_MFP &= ~(SYS_MFP_P20_Msk|SYS_MFP_P21_Msk|SYS_MFP_P22_Msk|SYS_MFP_P23_Msk);
  31.     SYS->P2_MFP |= SYS_MFP_P20_PWM0|SYS_MFP_P21_PWM1 |SYS_MFP_P22_PWM2 ;

  32.     GPIO_SetMode(P2, (1<<0)|(1<<1)|(1<<2)|(1<<3), GPIO_PMD_OUTPUT);
  33.      
  34.     /* 2- 设定 PWM5的频率和占空比.
  35.     *     设定 PWM2的频率和占空比  
  36.     */     
  37.    
  38.     /* 2-1 输出通道1 - PWM4-7 (PWMB 0-3)
  39.      *     输出通道0-3:PWM0-3 (PWMA,0-3)
  40.     */

  41.     /* Enable PWM Output pin :PWM2-PWMA, bit1*/
  42.     //PWM_EnableOutput(PWMB, (1<<0)|(1<<1)|(1<<2)|(1<<3) );
  43.     PWM_EnableOutput(PWMA, (1<<0)|(1<<1)|(1<<2));
  44.     /* 配置预分频为12: 频率为1mhz*/
  45.     PWM_SET_PRESCALER(PWMA,0,1);//2预分频率, 11MHZ
  46.     PWM_SET_PRESCALER(PWMA,1,1);//2预分频率
  47.     PWM_SET_PRESCALER(PWMA,2,1);//2预分频率
  48.    
  49.     /* 配置时钟为1分频 :如此每个pwm的tick为0.1us*/
  50.     PWM_SET_DIVIDER(PWMA,0,PWM_CLK_DIV_1);
  51.     PWM_SET_DIVIDER(PWMA,1,PWM_CLK_DIV_1);
  52.     PWM_SET_DIVIDER(PWMA,2,PWM_CLK_DIV_1);
  53.     PWM_SET_DIVIDER(PWMA,3,PWM_CLK_DIV_1);
  54.    
  55.     /* 设置频率为单次触发模式 */
  56.     _PWM_SET_TIMER_AUTO_RELOAD_MODE(PWMA,0);
  57.     _PWM_SET_TIMER_AUTO_RELOAD_MODE(PWMA,1);
  58.     _PWM_SET_TIMER_AUTO_RELOAD_MODE(PWMA,2);
  59.      
  60.     /* 设置CNR,设置CMR: 脉宽0-0.1ms; 周期 0.1ms 10khz */
  61.      PWM_SET_CMR(PWMA,0,0);    PWM_SET_CNR(PWMA,0,1000);
  62.      PWM_SET_CMR(PWMA,1,0);    PWM_SET_CNR(PWMA,1,1000);
  63.      PWM_SET_CMR(PWMA,2,0);    PWM_SET_CNR(PWMA,2,1000);
  64.         
  65.     /*P22:设置为反相输出 */
  66.     PWM_ENABLE_OUTPUT_INVERTER(PWMA,1<<2);
  67.      
  68.     /* 使能各个中断 */
  69. //    PWM_EnablePeriodInt(PWMB,0,PWM_PERIOD_INT_UNDERFLOW);
  70. //    PWM_EnablePeriodInt(PWMB,1,PWM_PERIOD_INT_UNDERFLOW);
  71. //    PWM_EnablePeriodInt(PWMB,2,PWM_PERIOD_INT_UNDERFLOW);
  72.     //PWM_EnablePeriodInt(PWMB,3,PWM_PERIOD_INT_UNDERFLOW);
  73.    
  74.     /* Enable PWMB NVIC */
  75.    // NVIC_EnableIRQ((IRQn_Type)(PWMB_IRQn));    /* 使能中断  */  

  76.    /* Enable PWM Timer */
  77.     PWM_Start(PWMA, (1<<0)|(1<<1)|(1<<2)|(1<<3) );      
  78.    
  79.     SYS_LockReg();     

  80. }

5 总结
     新唐讲真,还是不凑. EMC  ESD啥的 感觉不用操心太多.也没啥坏. 很耐++. 安利一下.  当然各大友商的M0-M7 除了评测 也没怎么批量用过.没有发言权. 新唐芯给力芯,加油吧.
早点出M23 M33 或者M7出来玩玩霸.


打赏榜单

21ic小管家 打赏了 5.00 元 2017-05-17

 楼主| Harvard 发表于 2017-5-4 18:41 | 显示全部楼层
奇怪我的帖子 怎么没有成功参与活动呢? @21ic小管家
zhuomuniao110 发表于 2017-5-5 10:54 | 显示全部楼层
估计是沉下去了,可以申请个参与奖啊。哈哈
zhuomuniao110 发表于 2017-5-5 10:55 | 显示全部楼层
下次参加应该狂顶上来,哈哈。
zhuomuniao110 发表于 2017-5-5 10:57 | 显示全部楼层
QQ截图20170505105551.png
刚开始还以为你今天才发的呢,不知道为何看你这显示个新发帖。。。帖子开头弄了个空的代码,估计是这个原因导致系统没显示?一直没看到过你这个帖子。。。
huangcunxiake 发表于 2017-5-5 11:28 | 显示全部楼层
这个还是设计阶段吗?有没有成品,给看看什么样的。
 楼主| Harvard 发表于 2017-5-5 13:21 | 显示全部楼层
huangcunxiake 发表于 2017-5-5 11:28
这个还是设计阶段吗?有没有成品,给看看什么样的。

有成品.
 楼主| Harvard 发表于 2017-5-5 13:22 | 显示全部楼层
zhuomuniao110 发表于 2017-5-5 10:54
估计是沉下去了,可以申请个参与奖啊。哈哈

谢谢 支持我 我找小管家看下
 楼主| Harvard 发表于 2017-5-5 13:35 | 显示全部楼层
huangcunxiake 发表于 2017-5-5 11:28
这个还是设计阶段吗?有没有成品,给看看什么样的。

LQGZW%N}GLO%AMM0HZL_Z.png
huangcunxiake 发表于 2017-5-5 14:03 | 显示全部楼层
漂亮,这机器估计要好几百大洋。
捉虫天师 发表于 2017-5-5 17:08 | 显示全部楼层
这个机器看着很好玩啊,土豪才用得起。
 楼主| Harvard 发表于 2017-5-17 15:25 | 显示全部楼层
稳稳の幸福 发表于 2017-5-17 15:57 | 显示全部楼层
漂亮,不知道效果咋样,楼主应该经常用吧
wuchonghjp 发表于 2017-5-20 17:32 | 显示全部楼层
这个要支持一下
 楼主| Harvard 发表于 2017-7-20 14:28 | 显示全部楼层

求M058LDN或者nuc029LAN特价支持
lp284626 发表于 2017-7-21 13:02 | 显示全部楼层
楼主有联系方式吗?加个QQ聊下也行!

评论

已经加qq了 不知道有没有什么优势的价格.  发表于 2017-7-30 13:36
wuchonghjp 发表于 2017-7-29 23:00 | 显示全部楼层
Harvard 发表于 2017-7-20 14:28
求M058LDN或者nuc029LAN特价支持

加我QQ或者给我电话就行,QQ:3001950805

评论

论坛私信你了 看看你有没有给力的价格  发表于 2017-7-30 13:37
您需要登录后才可以回帖 登录 | 注册

本版积分规则

74

主题

1732

帖子

21

粉丝
快速回复 在线客服 返回列表 返回顶部