18.4.9. GPTMR生成T型加减速脉冲
18.4.9.1. 概述
t_shape_accel_decel 示例工程演示了GPTMR在指定时间内生成指定数量的T型加减速脉冲的功能,同时可作为输出指定脉冲数量的参考。
脉冲数量通过DMA传输完成后自动停止。
18.4.9.2. 硬件设置
请参考具体开发板 引脚描述 部分的描述。
连接GPTMR比较输出引脚至示波器或者逻辑分析仪。
18.4.9.3. 软件设置
GPTMR驱动接口详情请参见 gptmr。
如果需要设置GPTMR的输出比较初始电平为高电平,为避免初始化过程中出现不可预期的输出脉冲,可在pinmux初始化GPTMR之前使用 gptmr_channel_set_cmp_initial_polarity 函数设置初始极性为高电平:
示例默认初始电平为低电平。若需设置为高电平,可将 APP_CMP_INITIAL_POLARITY_HIGH 宏定义置为1。
示例中的 gptmr_config API 实现了GPTMR的相关配置初始化。
输出指定脉冲数量的实现逻辑:
使用DMA传输动态配置GPTMR的CMP1和RELOAD寄存器。
每次GPTMR的RELOAD事件触发DMA传输,更新CMP1和RELOAD寄存器的值。
注意事项:
对于 DMA_SOC_MAX_COUNT == 1 的SOC,使用32bit的HDMA,仅能传输一个32bit寄存器值(RELOAD),因此只能改变脉冲频率,无法调整占空比。
对于 DMA_SOC_MAX_COUNT > 1 的SOC,使用64bit的XDMA,可传输两个连续的32bit寄存器值(CMP1和RELOAD),从而同时调整脉冲频率和占空比。
脉冲采用中心对齐PWM模式,要求 0 < CMP0 < CMP1 < RELOAD,其中占空比为 CMP1 - CMP0,周期为 RELOAD。
输出指定脉冲数量后需停止定时器计数器以避免持续产生脉冲。示例通过DMA链式传输实现:在最后一个脉冲时,自动指向停止计数器的DMA链式配置。
CMP0值默认为100(对应 APP_OFFSET_CMP0_TICK 宏定义),建议不要设置过低以确保DMA链式传输有足够时间。
可通过调整 APP_MAX_CYCLE_US 和 APP_MIN_CYCLE_US 宏定义设置脉冲的最大和最小周期(单位:微秒),默认最大周期为100us,最小周期为10us。
可通过调整 APP_CYCLE_COUNT 宏定义设置脉冲数量,默认生成100个脉冲。
18.4.9.4. 运行现象
运行工程,示例执行GPTMR的生成T型加减速脉冲的功能,使用示波器观测输出比较的引脚。上电后会打印不同脉冲的CMP1比较值和重装载值,随后每隔500ms输出固定脉宽不同频率的指定数量脉冲,LED会持续闪烁。串口终端输出如下信息:
对于使用HDMA的SOC,CMP1比较值相同,RELOAD值不同:
generate T_shape_accel_decel test
shape_table[0] compare_value:449, reload:9898
shape_table[1] compare_value:449, reload:9616
shape_table[2] compare_value:449, reload:9333
shape_table[3] compare_value:449, reload:9052
shape_table[4] compare_value:449, reload:8771
shape_table[5] compare_value:449, reload:8491
shape_table[6] compare_value:449, reload:8212
shape_table[7] compare_value:449, reload:7935
shape_table[8] compare_value:449, reload:7660
shape_table[9] compare_value:449, reload:7388
shape_table[10] compare_value:449, reload:7117
shape_table[11] compare_value:449, reload:6850
shape_table[12] compare_value:449, reload:6585
shape_table[13] compare_value:449, reload:6324
shape_table[14] compare_value:449, reload:6066
shape_table[15] compare_value:449, reload:5813
shape_table[16] compare_value:449, reload:5563
shape_table[17] compare_value:449, reload:5317
shape_table[18] compare_value:449, reload:5076
shape_table[19] compare_value:449, reload:4840
shape_table[20] compare_value:449, reload:4608
shape_table[21] compare_value:449, reload:4382
shape_table[22] compare_value:449, reload:4162
shape_table[23] compare_value:449, reload:3947
shape_table[24] compare_value:449, reload:3738
shape_table[25] compare_value:449, reload:3535
shape_table[26] compare_value:449, reload:3338
shape_table[27] compare_value:449, reload:3148
shape_table[28] compare_value:449, reload:2964
shape_table[29] compare_value:449, reload:2787
shape_table[30] compare_value:449, reload:2617
shape_table[31] compare_value:449, reload:2455
shape_table[32] compare_value:449, reload:2300
shape_table[33] compare_value:449, reload:2152
shape_table[34] compare_value:449, reload:2012
shape_table[35] compare_value:449, reload:1879
shape_table[36] compare_value:449, reload:1755
shape_table[37] compare_value:449, reload:1639
shape_table[38] compare_value:449, reload:1531
shape_table[39] compare_value:449, reload:1431
shape_table[40] compare_value:449, reload:1339
shape_table[41] compare_value:449, reload:1256
shape_table[42] compare_value:449, reload:1181
shape_table[43] compare_value:449, reload:1115
shape_table[44] compare_value:449, reload:1058
shape_table[45] compare_value:449, reload:1009
shape_table[46] compare_value:449, reload:969
shape_table[47] compare_value:449, reload:938
shape_table[48] compare_value:449, reload:916
shape_table[49] compare_value:449, reload:903
shape_table[50] compare_value:449, reload:899
shape_table[51] compare_value:449, reload:903
shape_table[52] compare_value:449, reload:916
shape_table[53] compare_value:449, reload:938
shape_table[54] compare_value:449, reload:969
shape_table[55] compare_value:449, reload:1009
shape_table[56] compare_value:449, reload:1058
shape_table[57] compare_value:449, reload:1115
shape_table[58] compare_value:449, reload:1181
shape_table[59] compare_value:449, reload:1256
shape_table[60] compare_value:449, reload:1339
shape_table[61] compare_value:449, reload:1431
shape_table[62] compare_value:449, reload:1531
shape_table[63] compare_value:449, reload:1639
shape_table[64] compare_value:449, reload:1755
shape_table[65] compare_value:449, reload:1879
shape_table[66] compare_value:449, reload:2012
shape_table[67] compare_value:449, reload:2152
shape_table[68] compare_value:449, reload:2300
shape_table[69] compare_value:449, reload:2455
shape_table[70] compare_value:449, reload:2617
shape_table[71] compare_value:449, reload:2787
shape_table[72] compare_value:449, reload:2964
shape_table[73] compare_value:449, reload:3148
shape_table[74] compare_value:449, reload:3338
shape_table[75] compare_value:449, reload:3535
shape_table[76] compare_value:449, reload:3738
shape_table[77] compare_value:449, reload:3947
shape_table[78] compare_value:449, reload:4162
shape_table[79] compare_value:449, reload:4382
shape_table[80] compare_value:449, reload:4608
shape_table[81] compare_value:449, reload:4840
shape_table[82] compare_value:449, reload:5076
shape_table[83] compare_value:449, reload:5317
shape_table[84] compare_value:449, reload:5563
shape_table[85] compare_value:449, reload:5813
shape_table[86] compare_value:449, reload:6066
shape_table[87] compare_value:449, reload:6324
shape_table[88] compare_value:449, reload:6585
shape_table[89] compare_value:449, reload:6850
shape_table[90] compare_value:449, reload:7117
shape_table[91] compare_value:449, reload:7388
shape_table[92] compare_value:449, reload:7660
shape_table[93] compare_value:449, reload:7935
shape_table[94] compare_value:449, reload:8212
shape_table[95] compare_value:449, reload:8491
shape_table[96] compare_value:449, reload:8771
shape_table[97] compare_value:449, reload:9052
shape_table[98] compare_value:449, reload:9333
shape_table[99] compare_value:449, reload:9616
....
对于使用XDMA的SOC,CMP1和RELOAD值均不同:
generate T_shape_accel_decel test
shape_table[0] compare_value:5099, reload:9898
shape_table[1] compare_value:4958, reload:9616
shape_table[2] compare_value:4816, reload:9333
shape_table[3] compare_value:4676, reload:9052
shape_table[4] compare_value:4535, reload:8771
shape_table[5] compare_value:4395, reload:8491
shape_table[6] compare_value:4256, reload:8212
shape_table[7] compare_value:4117, reload:7935
shape_table[8] compare_value:3980, reload:7660
shape_table[9] compare_value:3844, reload:7388
shape_table[10] compare_value:3708, reload:7117
shape_table[11] compare_value:3575, reload:6850
shape_table[12] compare_value:3442, reload:6585
shape_table[13] compare_value:3312, reload:6324
shape_table[14] compare_value:3183, reload:6066
shape_table[15] compare_value:3056, reload:5813
shape_table[16] compare_value:2931, reload:5563
shape_table[17] compare_value:2808, reload:5317
shape_table[18] compare_value:2688, reload:5076
shape_table[19] compare_value:2570, reload:4840
shape_table[20] compare_value:2454, reload:4608
shape_table[21] compare_value:2341, reload:4382
shape_table[22] compare_value:2231, reload:4162
shape_table[23] compare_value:2123, reload:3947
shape_table[24] compare_value:2019, reload:3738
shape_table[25] compare_value:1917, reload:3535
shape_table[26] compare_value:1819, reload:3338
shape_table[27] compare_value:1724, reload:3148
shape_table[28] compare_value:1632, reload:2964
shape_table[29] compare_value:1543, reload:2787
shape_table[30] compare_value:1458, reload:2617
shape_table[31] compare_value:1377, reload:2455
shape_table[32] compare_value:1300, reload:2300
shape_table[33] compare_value:1226, reload:2152
shape_table[34] compare_value:1156, reload:2012
shape_table[35] compare_value:1089, reload:1879
shape_table[36] compare_value:1027, reload:1755
shape_table[37] compare_value:969, reload:1639
shape_table[38] compare_value:915, reload:1531
shape_table[39] compare_value:865, reload:1431
shape_table[40] compare_value:819, reload:1339
shape_table[41] compare_value:778, reload:1256
shape_table[42] compare_value:740, reload:1181
shape_table[43] compare_value:707, reload:1115
shape_table[44] compare_value:679, reload:1058
shape_table[45] compare_value:654, reload:1009
shape_table[46] compare_value:634, reload:969
shape_table[47] compare_value:619, reload:938
shape_table[48] compare_value:608, reload:916
shape_table[49] compare_value:601, reload:903
shape_table[50] compare_value:599, reload:899
shape_table[51] compare_value:601, reload:903
shape_table[52] compare_value:608, reload:916
shape_table[53] compare_value:619, reload:938
shape_table[54] compare_value:634, reload:969
shape_table[55] compare_value:654, reload:1009
shape_table[56] compare_value:679, reload:1058
shape_table[57] compare_value:707, reload:1115
shape_table[58] compare_value:740, reload:1181
shape_table[59] compare_value:778, reload:1256
shape_table[60] compare_value:819, reload:1339
shape_table[61] compare_value:865, reload:1431
shape_table[62] compare_value:915, reload:1531
shape_table[63] compare_value:969, reload:1639
shape_table[64] compare_value:1027, reload:1755
shape_table[65] compare_value:1089, reload:1879
shape_table[66] compare_value:1156, reload:2012
shape_table[67] compare_value:1226, reload:2152
shape_table[68] compare_value:1300, reload:2300
shape_table[69] compare_value:1377, reload:2455
shape_table[70] compare_value:1458, reload:2617
shape_table[71] compare_value:1543, reload:2787
shape_table[72] compare_value:1632, reload:2964
shape_table[73] compare_value:1724, reload:3148
shape_table[74] compare_value:1819, reload:3338
shape_table[75] compare_value:1917, reload:3535
shape_table[76] compare_value:2019, reload:3738
shape_table[77] compare_value:2123, reload:3947
shape_table[78] compare_value:2231, reload:4162
shape_table[79] compare_value:2341, reload:4382
shape_table[80] compare_value:2454, reload:4608
shape_table[81] compare_value:2570, reload:4840
shape_table[82] compare_value:2688, reload:5076
shape_table[83] compare_value:2808, reload:5317
shape_table[84] compare_value:2931, reload:5563
shape_table[85] compare_value:3056, reload:5813
shape_table[86] compare_value:3183, reload:6066
shape_table[87] compare_value:3312, reload:6324
shape_table[88] compare_value:3442, reload:6585
shape_table[89] compare_value:3575, reload:6850
shape_table[90] compare_value:3708, reload:7117
shape_table[91] compare_value:3844, reload:7388
shape_table[92] compare_value:3980, reload:7660
shape_table[93] compare_value:4117, reload:7935
shape_table[94] compare_value:4256, reload:8212
shape_table[95] compare_value:4395, reload:8491
shape_table[96] compare_value:4535, reload:8771
shape_table[97] compare_value:4676, reload:9052
shape_table[98] compare_value:4816, reload:9333
shape_table[99] compare_value:4958, reload:9616
....