| 
在线时间400 小时
UID2075309
注册时间2014-2-25
NXP金币113 
 TA的每日心情|  | 开心 2019-10-17 08:07
 | 
|---|
 签到天数: 273 天 连续签到: 1 天 [LV.8]以坛为家I 金牌会员  
 
	积分7538 
最后登录2021-8-30 | 
 
| 本帖最后由 anny 于 2016-11-13 10:31 编辑 
 程序是直接例程更改,可以说没有什么创意,但是这就是学习过程,有时候也是一种笔记式的记录。
 PWM控制直流电机使用了现成的L298模块,硬件没有什么难度,看看我对例程的理解吧,有不对的请指出,在此谢过!!!
 
 1、设置普通控制端口及初始化:
 #define M2       24
 #define M1       25
 
 Chip_GPIO_PortSetDIR(LPC_GPIO_PORT, 0, GPIOCONFIG, 1);
 Chip_GPIO_PortSetState(LPC_GPIO_PORT, 0, GPIOCONFIG);
 
 
 2、设置PWM控制端口:
 static void app_setup_pin(void)
 {
 /* Enable SWM clock before altering SWM */
 Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_SWM);
 
 Chip_SWM_MovablePinAssign(SWM_SCT_OUT1_O, 15);
 Chip_SWM_MovablePinAssign(SWM_SCT_OUT0_O, 26);
 
 Chip_Clock_DisablePeriphClock(SYSCTL_CLOCK_SWM);
 }
 
 3、PWM初始化:
 Chip_SCTPWM_Init(SCT_PWM);
 Chip_SCTPWM_SetRate(SCT_PWM, SCT_PWM_RATE);//ÉèÖÃËÙ¶È
 
 /* Setup Board specific output pin */
 app_setup_pin();
 
 /* Use SCT0_OUT1 pin */
 Chip_SCTPWM_SetOutPin(SCT_PWM, SCT_PWM_LED, SCT_PWM_PIN_OUT);
 Chip_SCTPWM_SetOutPin(SCT_PWM, SCT_PWM_LED, SCT_PWM_PIN_LED);
 
 /* Start with 0% duty cycle */
 Chip_SCTPWM_SetDutyCycle(SCT_PWM, SCT_PWM_OUT, 0);//Chip_SCTPWM_GetTicksPerCycle(SCT_PWM) / 2);
 Chip_SCTPWM_SetDutyCycle(SCT_PWM, SCT_PWM_LED, 0);
 Chip_SCTPWM_Start(SCT_PWM);
 
 SysTick_Config(SystemCoreClock / TICKRATE_HZ);
 
 4、控制函数:
 uint32_t GPIOCONFIG = ( (1 << M2) | (1 << M1) );
 Chip_GPIO_PortSetOutLow(LPC_GPIO_PORT, 0, GPIOCONFIG);//设置M1、M2为低,只要PWM有输出电机就会动了
 if (cnt2 >= 100) {
 led_dp += 1;
 if (led_dp < 0) {
 led_dp = 0;
 led_step = 1;
 }
 if (led_dp > 200) {
 led_dp = 200;
 led_step = -1;
 }
 Chip_SCTPWM_SetDutyCycle(SCT_PWM, SCT_PWM_LED,
 Chip_SCTPWM_PercentageToTicks(SCT_PWM, led_dp)/2);
 cnt2 = 0;
 }
 __WFI();//MCU进入低功耗等待状态
 
 5、总结:
 LPC824的PWM控制端口相当灵活,想让哪个IO口输出都可以通过设置实现(不是所有IO)
 
 6、真像展示:
 
 
   
 
   7、例程下载
 
 
  sct_pwm.rar
(795.18 KB, 下载次数: 41) | 
 |