yanniwang

利用ADuC7026控制有刷直流电机的两种方法

0
阅读(4237)

1.直流电动机的工作原理

  导体受力的方向用左手定则确定。这一对电磁力形成了作用于电枢一个力矩,这个力矩在旋转电机里称为电磁转矩,转矩的方向是逆时针方向,企图使电枢逆时针方向转动。如果此电磁转矩能够克服电枢上的阻转矩(例如由摩擦引起的阻转矩以及其它负载转矩),电枢就能按逆时针方向旋转起来。

2.ADUC7026控制方式

对直流电机有两种控制方式,一是通过连接到DAC接口通过改变输入电压来改变转速,或是连接到PWM接口通过改变PWM信号的占空比来改变转速。下面介绍用ADuC7026的DAC和PWM功能控制电机转速的方法。

 

 

 

(1)通过调节电位器的值来改变ADC0引脚的输入电压值,对ADC0的输入电压进行重复单一的DA转换,DAC1的输出随着电位计的调节而改变,从而控制电机转速。

ADuC7026片上DAC简介:ADUC7026集成了4个12位电压输出的DAC,每个DAC都有一个可以驱动5 kΩ/100 pF的缓冲器。它有三个可选择的量程,0V~VREF (内部带隙2.5V参考电压),0V~DACREF和0V~AVDD。DACREF同外部的DAC参考电压是等效的,其信号的范围为0V~AVDD。它们采用电阻串网络,通过缓冲放大器与端口相连。

#include<aduc7026.h>

void ADCpoweron(int);

 

int main(void)

{  // 设置ADC和DAC

ADCpoweron(20000);                  // 设置ADC上电

ADCCP = 0x00;                              // 设置ADC0转换

DAC1CON = 0x13;                      // 设置参考电压范围为AGND~AVDD

REFCON = 0x01;                        // 内部2.5V参考电压

 

while (1)

 {

       ADCCON = 0x6A3;                       // 软件启动转换,单端模式,转换启动使能

       while (!ADCSTA){}                   // 等待转换结束

       DAC1DAT = ADCDAT;               // 将ADC0的结果送到DAC1

}

}

void ADCpoweron(int time)

{

       ADCCON = 0x620;                     // ADC上电

       while (time >=0)                          // 延时,等待ADC完全上电

    time--;

}

/******************************************************************************/

(2)控制PWM占空比,调节senddata数值改变电机运转速度

aduc7026PWM简介:ADuC7026有一个灵活的,可编程的三相脉宽调制(PWM)波形发生器,通过编程可以产生驱动三相电压源逆变器所需的转换模式,来控制交流电机。它可在六个PWM输出管脚(PWM0H、PWM0L、PWM1H、PWM1L、PWM2H、PWM2H)产生三对PWM信号,这六路PWM输出信号包含三个高电平驱动信号和三个低电平驱动信号。产生的PWM模式的转换频率和死区时间可通过PWMDAT0 和PWMDAT1 寄存器编程实现。另外,三个占空比控制寄存器(PWMCH0、PWMCH1和PWMCH2)直接控制三对PWM信号的占空比。六路PWM输出信号可以分别由PWMEN寄存器中的输出使能位控制使能,而PWMEN寄存器中的三个控制位允许各对PWM信号中的两个信号交叉使用。在交叉模式下,本应向高电平转换的PWM信号会转变为互补的低电平输出,本应向低电平转换的PWM信号会转变为互补的高电平输出。

 

#include<aduc7026.h>

int main(void) {

 

   GP4DAT = 0x04000000;                // 设置P4.2输出,LED 亮

   GP3CON = 0x11111111;                 // 使能PWM输出到P3口

 

   // 设置PWM

   PWMCON = 0x0001;                  // 使能PWM

   PWMDAT0 = 0x00A0;                 // 切换周期

   PWMDAT1 = 0x00;                   // 死区时间

   PWMCFG = 0x00;                    // 低电平门极斩波使能

   PWMCH0 =senddata;              // 通道0占空比

  

   PWMEN = 0x00;                      // 使能通道输出和交叉

 

   GP4DAT ^= 0x00040000;              // 补充P4.2引脚,输出数据

   while (1){}

}

/******************************************************************************/