在线时间400 小时
UID2075309
注册时间2014-2-25
NXP金币83
TA的每日心情 | 开心 2019-10-17 08:07 |
---|
签到天数: 273 天 连续签到: 1 天 [LV.8]以坛为家I
金牌会员
 
- 积分
- 7508
- 最后登录
- 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)
|
|