嵌入式——1138纯净版代码(PWM)

这些是我自己常用的代码,比官方的要简洁些,主要是自用,还有相关模块,使用代码。
具体文件可以去我博客https://ailous.top/上下载。

pwm简介

脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。

脉冲宽度调制是一种模拟控制方式,其根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。

PWM控制技术以其控制简单,灵活和动态响应好的优点而成为电力电子技术最广泛应用的控制方式,也是人们研究的热点。由于当今科学技术的发展已经没有了学科之间的界限,结合现代控制理论思想或实现无谐振波开关技术将会成为PWM控制技术发展的主要方向之一。其根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。

源码main函数
#include  "systemInit.h"
#include  <ctype.h>
#include  <timer.h>
#define  PART_LM3S1138
#include  <pin_map.h>
#include <math.h>

int T1A , T1B , T2A , T2B ;

void Moto_Init(void){ //³õʼ»¯µç»ú
  
  SysCtlPeriEnable(SYSCTL_PERIPH_TIMER1);                 //  ʹÄÜTIMER1Ä£¿é
  SysCtlPeriEnable(SYSCTL_PERIPH_TIMER2);                 //  ʹÄÜTIMER2Ä£¿é
  
  SysCtlPeriEnable(CCP2_PERIPH);                          //  ʹÄÜCCP2ËùÔÚµÄGPIO¶Ë¿Ú
  SysCtlPeriEnable(CCP3_PERIPH);                          //  ʹÄÜCCP3ËùÔÚµÄGPIO¶Ë¿Ú
  SysCtlPeriEnable(CCP4_PERIPH);                          //  ʹÄÜCCP4ËùÔÚµÄGPIO¶Ë¿Ú
  SysCtlPeriEnable(CCP5_PERIPH);                          //  ʹÄÜCCP5ËùÔÚµÄGPIO¶Ë¿Ú
  
  GPIOPinTypeTimer(CCP2_PORT, CCP2_PIN);                  //  ÉèÖÃÏà¹Ø¹Ü½ÅΪTimer¹¦ÄÜ
  GPIOPinTypeTimer(CCP3_PORT, CCP3_PIN);                  //  ÉèÖÃÏà¹Ø¹Ü½ÅΪTimer¹¦ÄÜ
  GPIOPinTypeTimer(CCP4_PORT, CCP4_PIN);                  //  ÉèÖÃÏà¹Ø¹Ü½ÅΪTimer¹¦ÄÜ
  GPIOPinTypeTimer(CCP5_PORT, CCP5_PIN);                  //  ÉèÖÃÏà¹Ø¹Ü½ÅΪTimer¹¦ÄÜ
  
  TimerConfigure(TIMER1_BASE, TIMER_CFG_16_BIT_PAIR |     //  ÅäÖÃTimerΪ˫16λPWM
                 TIMER_CFG_A_PWM |
                   TIMER_CFG_B_PWM);
  TimerConfigure(TIMER2_BASE, TIMER_CFG_16_BIT_PAIR |     //  ÅäÖÃTimerΪ˫16λPWM
                 TIMER_CFG_A_PWM |
                   TIMER_CFG_B_PWM);
  
  
  TimerControlLevel(TIMER1_BASE, TIMER_BOTH, true);      //  ¿ØÖÆPWMÊä³ö·´Ïà
  TimerControlLevel(TIMER2_BASE, TIMER_BOTH, true);
  TimerLoadSet(TIMER1_BASE, TIMER_BOTH, 1000);           //  ÉèÖÃTimerBoth³õÖµ
  TimerLoadSet(TIMER2_BASE, TIMER_BOTH, 1000);
  
  TimerMatchSet(TIMER1_BASE, TIMER_A, 0);     //  ÉèÖÃTimerBÆ¥ÅäÖµ
  TimerMatchSet(TIMER1_BASE, TIMER_B, 0);     //  ÉèÖÃTimerBÆ¥ÅäÖµ
  TimerMatchSet(TIMER2_BASE, TIMER_A, 0);     //  ÉèÖÃTimerBÆ¥ÅäÖµ
  TimerMatchSet(TIMER2_BASE, TIMER_B, 0);     //  ÉèÖÃTimerBÆ¥ÅäÖµ
  
  TimerEnable(TIMER1_BASE, TIMER_BOTH);                  //  ʹÄÜTimer¼ÆÊý£¬PWM¿ªÊ¼Êä³ö
  TimerEnable(TIMER2_BASE, TIMER_BOTH);
}



//  Ö÷º¯Êý£¨³ÌÐòÈë¿Ú£©
int main(void)
{
  jtagWait();                                             //  ·ÀÖ¹JTAGʧЧ£¬ÖØÒª£¡
  clockInit();                                            //  ʱÖÓ³õʼ»¯£º¾§Õñ£¬6MHz
  Moto_Init();
  
  while(1)
  {
    TimerMatchSet(TIMER1_BASE, TIMER_A, T1A);     //  ÉèÖÃTimerBÆ¥ÅäÖµ
    TimerMatchSet(TIMER1_BASE, TIMER_B, T1B);     //  ÉèÖÃTimerBÆ¥ÅäÖµ 
    TimerMatchSet(TIMER2_BASE, TIMER_A, T2A);     //  ÉèÖÃTimerBÆ¥ÅäÖµ
    TimerMatchSet(TIMER2_BASE, TIMER_B, T2B);     //  ÉèÖÃTimerBÆ¥ÅäÖµ
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值