打印
[PIC®/AVR®/dsPIC®产品]

【CuriosityNano测评报告】+使用PWM波驱动无刷直流电机

[复制链接]
1189|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mxkw0514|  楼主 | 2022-11-28 00:42 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 mxkw0514 于 2022-12-2 20:25 编辑

引言
      本文基于AVR64DD32单片机开展了一个BLDC电机调速试验,使用了单片机的ADC、UART和Timer外设,完成了对AVR64DD32单片机及其最新开发工具MPLAB X IDE V6.05的简单测评。该测评的主要内容为:旋纽电位器产生不同的直流电压,单片机的ADC外设采样该电压并将其转换成对应的圈数值传递给CPU,CPU通过片内TCB定时器捕获BLDC反馈的脉冲信号频率,控制TCA0定时器产生一个占空比可调的脉冲信号驱动BLDC电机达到预设的转速。系统框图如下所示:


图1 项目系统框图


1、环境搭建

      前不久换了电脑,正好可以试一下microchip最新的MPLAB。新下载安装的MPLAB在运行MCC时特别卡,老是转圈圈,从讨论贴中了解到关闭网络后运行MCC速度会很快【1】,于是我这样做了,效果还很好。插上AVR64DD32开发板,开启MCC后,发现只能用MCC melody而无法使用MCC classic,不知所以然,就去官网查了一下其区别,如图2所示。了解到MCC melody 与 MCCclassic都是支持PIC和AVR的,只是新设计建议使用melody,但我还是想用classic,为什么用不了呢?


图2 MCC melody与MCC classic区别

      这次的MCC的builder多了一个可视化界面,如图3所示,可以很清楚地看到到项目中所使用的各个外设之间的关联,点击builder内部外设框图还能看到内部更为详细的寄存器与外部其它外设的关联,比较直白。安装软件只要根据提示点击NEXT,安装好根据提示选择更新就可以了,主要是后面使用过程遇到了一些小插曲。例如第一次运行基于MCC的项目程序时,出现了如同4的报错界面,就是Operation holdinreset not implemented,板子硬件是没有问题的,一时找不到原因,没办法只好点击tool的plugin菜单,卸载MCC然后重新再安装就解决这个问题了。接下来开始项目程序吧。




图3 builder可视化界面



图4 报错界面


2、程序编写
        本次测评开展的小项目需要使用到外设有UART、Timer、和ADC外设,MCC对外设的初始化配置还是很方便的,也能MCC生成的.C文件中调用功能函数。在使用MCC配置外设之前还先点击CLKCTRL、interrupt manager配置系统时钟和开启总中断,如同5所示。


图5 配置系统时钟和开启总中断

      本次使用到的定时器主要有两个:TCA0和TCB0,TCA0用来产生占空比可调的脉冲波,TCB0用来捕获和测量BLDC电机反馈脉冲频率。初始占空比可以直接在MCC的TCA0中配置,但要实现占空比可调则需要在主程序中改变 TCA0.SINGLE.CMP0的值,TCA0时钟越大,TCA0.SINGLE.CMP0步进就越细。此外还需要注意的是TCB0中捕获模式需要选择FRQ,如图6所示,在FQR模式下,每次上升沿触发捕获会将CNT值存储到CCMP中,并将CNT清零开启下一次捕获,这样就能根据CCMP值计算BLDC电机反馈频率以换算出电机实际转速,如同7所示。


图6 定时器配置



图7 FQR捕获模式示意图


      ADC模块配置如下所示,需要选择基准电压,这里选择的是VDD(3.3V),如同8所示。另外还需选择数据对齐方式,这里选择左对齐,程序中还需要将其换算回来,此处参考了该作者的帖子【4】,程序如下所示。




图8 ADC外设配置图


ADCValue=ADC0_GetConversion(ADC_MUXPOS_AIN20_gc)>>4;//右移四位

      通过捕获和计算反馈脉冲频率可以换算出BLDC电机的实际转速,连续多次对反馈脉冲进行采样,将其存储在数组中,对其进行冒泡排序,去除两端最大值和最小值,然后进行平均获得稳定值。该程序如下所示:
int Get_Fulse_Time( )
{
  unsigned int i = 0;
  unsigned int j = 0;
  unsigned int f_temp = 0;
  unsigned int Frequence_All = 0;  
/*******************************************N次采样和存储****************************************************/
    for(i=0;i<N;i++)
    {
      DELAY_milliseconds(50);
      Frequence_Arr[i]  = blcd_pulse_time;
    }   
/****************************************冒泡排序*****************************************************/     
    for(j = 0; j < N; j++)
    {
     for(i = 0; i < N-j; i++)
      {      
       if(Frequence_Arr[i] > Frequence_Arr[i+1] )
        {
         f_temp = Frequence_Arr[i] ;
         Frequence_Arr[i] =  Frequence_Arr[i+1];
         Frequence_Arr[i+1] = f_temp;        
        }
      
      }
    }
/*************************************分别去除两端n个最大值和最小值******************************************************/      
     for(i=n;i<N-n;i++)
    {     
     Frequence_All=Frequence_All + Frequence_Arr[i];
    }   
    Frequence_Ave = (Frequence_All/(N-2*n));//求平均值
    return Frequence_Ave;
         
}


      最新版本MCC中的EVSYS鼠标点击不了,不知道怎么使用(如果有知道的工程师看到了这篇帖子还请指导一下),只好手动加上EVENT_SYSTEM_init函数配置捕获用的触发通道【3】,该程序如下所示。另外延时函数如果MCC没有自动添加进主程序的话,记得手动添加呀。
void EVENT_SYSTEM_init (void)
{
    /* Set Port F Pin 6 (PF6) as input event on channel 5 */
    EVSYS.CHANNEL5 = EVSYS_CHANNEL5_PORTF_PIN3_gc;
    /* Connect user TCB0 Capt to event on channel 5 */
    EVSYS.USERTCB0CAPT = EVSYS_USER_CHANNEL5_gc;
}




3、实验结果

      电脑串口调试助手展示的ADC采样频率和捕获脉冲周期(us)如图9所示。


图11 ADC采样值和捕获脉冲周期串口打印


      BLDC电机反馈波形和驱动波形如同10所示。这个BLDC电机的反馈脉冲频率变化较大,一开始我以为是测量程序不对,其实不是。我用TCB0捕获TCA0的脉冲波频率非常准确。然后我但示波器观察BLDC电机反馈波形确实频率变化较大,所以最终效果不是特别好。这个小项目的思路应该是正确的,试验结果的实物图和演示视频如下所示。


图10 电机驱动波形和反馈波形




图11 项目演示实物图







4、测评心得

      这次正好手中有一个BLDC电机,顺便用AVR64DD32单片机开展了一个小项目实现对BLDC电机的调速,总体来说还是成功完成了本次的测评试验。对于本次试验,时间花费比较多的还是在使用MPLAB X IDE 6.05开发工具上,这个工具目前还是存在一些下次的,例如联网情况下运行MCC特别卡和慢,但是不管怎么样也无法掩盖这个开发工具的代码初始配置的便捷性,至少没有几家半导体公司能够独立研发自己的开发工具的,这些自研的开发工具我已知的有TI的CCS、瑞萨E2 studio等。测评的目的除了满足电子爱好者兴趣外,还能展用户对被测评产品的使用体验,有利于原厂对产品的进一步的优化,难道不是么?









       同行8位单片机有STC89、12、15系列单片机(是8051内核,开发工具是keil4),基于该单片机及其相关工具在本科教学使用得比较多;其次是Atmeg系列8位单片机,基于该单片机的arduino板卡(开发工具Arduino IDE)在DIY中使用得非常普遍,主要是简单易学。51单片机寄存器比较少,当时我上单片机课程时也没掌握学习方法,为了应付考试也是死记硬背的。但是我觉得MPLAB的MCC工具更适合本科单片机教学入门,它展示的图形化寄存器相关界面更为形象、直观和简洁,其次AVR和PIC单片机的外设非常丰富,包括OPA、ADC、DAC、MVIO、ZCD等,丰富的外设感觉是8位单片机的精华。




参考文献



【1】gaoyang9992006.MCC,情况就是这么个情况,事情就是这么个事情[DB/OL].(2022)[2022-11-28].https://bbs.21ic.com/icview-3265928-1-1.html.

【2】Microchip Technology Inc. /AVR64DD32-28-Prelim-DataSheet-DS40002315B[DB/OL].(2022)[2022-11-28].https://ww1.microchip.com/downloads/aemDocuments/documents/MCU08/ProductDocuments/DataSheets/AVR64DD32-28-Prelim-DataSheet-DS40002315B.pdf.

【3】GitHub.Timer Counter Type B (TCB) in Three Different Modes Using the AVR64DD32 Microcontroller[DB/OL].(2022)[2022-11-28].https://github.com/microchip-pic-avr-examples/avr64dd32-getting-started-with-tcb-mplabx/tree/1.0.0/#3-tcb-in-time-out-check-mode.

【4】hu9jj.[size=1em]【CuriosityNano测评报告】+ AVR64DD32ADC多路电压表实验[DB/OL].(2022)[2022-11-28].https://bbs.21ic.com/icview-3268116-1-1.html.








使用特权

评论回复
沙发
pzsh| | 2022-11-28 14:43 | 只看该作者
运行慢,不知道是不是服务器在国外

使用特权

评论回复
板凳
loutin| | 2023-7-12 17:39 | 只看该作者
直流无刷电机PWM调速是什么原理

使用特权

评论回复
地板
belindagraham| | 2023-7-12 18:32 | 只看该作者
PWM波是怎样控制无刷直流电机转速的

使用特权

评论回复
5
minzisc| | 2023-7-12 18:42 | 只看该作者
可以通过改变PWM的占空比来调整电机的转速。较大的占空比会增加电机的转速,而较小的占空比则会降低转速。

使用特权

评论回复
6
sesefadou| | 2023-7-13 13:55 | 只看该作者
使用PWM波驱动无刷直流电机需要连接电机、配置PWM波、驱动电机、测试电机和调整参数等步骤。

使用特权

评论回复
7
wilhelmina2| | 2023-7-13 15:06 | 只看该作者
12V无刷电机直接用12V的pwm波就能驱动和调速吗?

使用特权

评论回复
8
zerorobert| | 2023-7-14 13:00 | 只看该作者
根据电机的参数和驱动要求,选择合适的PWM芯片,例如MOSFET、BJT等。

使用特权

评论回复
9
phoenixwhite| | 2023-7-14 20:34 | 只看该作者
加入保护电路了吗,例如过流保护、过压保护等

使用特权

评论回复
10
pl202| | 2023-7-14 22:33 | 只看该作者
使用PWM 波驱动无刷直流电机是一种常见的方法。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

562

帖子

5

粉丝