S32K144(12)FTM
PWM和輸出比較的區別
輸出比較模式下:
PWM模式:?頻率和占空比可以任意設置,起始相位不能設置。?CNT < CCR時輸出一種電平,CNT > CCR時輸出相反的電平。
輸出比較模式:頻率和起始相位可以任意設置,占空比不能設置。輸出頻率為理論計算值一半。 CCR = CNT 時,翻轉輸出電平。
1、簡介
開發板S32K144+S32DS+JLINK,裸機版的程序編寫
FlexTimer模塊(FTM)是一個2 - 8通道計時器,支持輸入捕獲,輸出比較,并產生PWM信號來控制電機和電源
特點:
- 時鐘源可選擇:
- 源時鐘可以是FTM輸入時鐘、固定頻率時鐘或外部時鐘時鐘源
- 固定頻率時鐘是允許選擇on的額外時鐘輸入芯片時鐘源以外的FTM輸入時鐘
- 選擇外部時鐘將FTM時鐘連接到一個芯片電平輸入引腳,允許FTM計數器與芯片外時鐘源同步
- 預分頻器除以1、2、4、8、16、32、64或128
- 16位計數器:
- 它可以是一個自由運行的計數器或計數器的初始值和最終值,
- 計數可以向上或向下
- PWM模式每個通道可以配置為輸入捕獲,輸出比較,或邊緣對齊
- 輸入捕獲模式下:
捕捉可以發生在上升邊緣、下降邊緣或兩個邊緣
可以為一些通道選擇一個輸入過濾器。一個獨特的分頻器是適用于所有過濾器
在輸出比較模式下,輸出信號可以設置,清除,或翻轉
所有通道都可以配置為中央對齊PWM模式
每對通道可以組合起來產生一個PWM信號,并對PWM信號的兩個邊緣進行獨立控制
FTM通道可以作為具有相等輸出的成對、具有互補輸出的成對或具有獨立輸出的獨立通道來工作
死區時間插入可用互補對
生成匹配觸發器
PWM輸出軟件控制
多達4個故障輸入,用于全局故障控制
每個通道的極性是可配置的
每個通道產生一個中斷
當計數器溢出時產生中斷
當檢測到故障條件時,中斷的產生
當寄存器重新加載點發生時,中斷的產生
寫入緩沖FTM寄存器的同步加載
半周和全周期寄存器的重新加載能力
關鍵寄存器的寫保護
向后兼容TPM
測試輸入捕獲模式
直接訪問輸入引腳狀態
用于脈沖和周期寬度測量的雙邊緣捕捉
正交解碼器與輸入濾波器,相對位置計數,和中斷位置計數或捕捉位置取決于外部事件
可以選擇FTM通道在通道輸出上產生觸發脈沖而不是PWM
抖動能力,以模擬精細邊緣控制的PWM周期或PWM工作周期
2、原理圖
無
3、寄存器
3.1、SC: Status And Control
SC包含溢出狀態標志和控制位,用于配置中斷啟用、FTM配置、時鐘源、濾波器預分頻器和預分頻器因子。此寄存器還包含輸出啟用控制位和重新加載機會標志控制。這些控件與此模塊內的所有通道相關。
| Field | Name | Description | 
| 0-2 | PS | 預分頻: 1-128 | 
| 3-4 | CLKS | 時鐘源選擇 | 
| 5 | CPWMS | 配置計數模式 | 
| 6 | RIE | 重載標志 | 
| 7 | RF | 定時器溢出中斷你使能 | 
| 8 | TOIE | 定時器溢出標志 | 
| 9 | TOF | 時鐘引腳使能 | 
| 16-23 | PWMENn | 通道nPWM使能 | 
| 24-27 | FLTPS | 濾波器預分頻 | 
3.2、CNT: Counter
| Field | Name | Description | 
| 0-15 | COUNT | 計數器的值 | 
3.3、MOD: Modulo
模寄存器包含FTM計數器的模值。當FTM計數器達到模值后,溢出標志(TOF)在下一個時鐘周期設置,FTM計數器的下一個值取決于所選的計數方法
| Field | Name | Description | 
| 0-15 | MOD | 模值 | 
3.4、C0SC - C7SC: Channel (n) Status And Control
CnSC包含通道(n)狀態位和選擇通道(n)模式的控制位和它的功能
| Field | Name | Description | 
| 0 | DMA | DMA使能 | 
| 1 | ICRST | 輸入捕獲事件復位FTM計數器選擇 | 
| 2 | ELSA | 通道(n)邊緣或水平選擇 | 
| 3 | ELSB | 通道(n)邊緣或水平選擇 | 
| 4 | MSA | 通道(n)模式選擇 | 
| 5 | MSB | 通道(n)模式選擇 | 
| 6 | CHE | 通道(n)中斷使能 | 
| 7 | CHIF | 通道(n)事件標志 | 
| 8 | TRIGMODE | 觸發模式控制 | 
| 9 | CHIS | 通道(n)輸入狀態 | 
| 10 | CHOV | 通道(n)輸出值 | 
3.5、C0V - C7V: Channel (n) Value
| Field | Name | Description | 
| 0-15 | VAL | 通道值 捕獲的輸入模式的FTM計數器值或輸出模式的匹配值 | 
3.6、CNTIN: Counter Initial Value
| Field | Name | Description | 
| 0-15 | INIT | FTM計數器初始化值 | 
3.7、STATUS: Capture And Compare Status
| Field | Name | Description | 
| 0-7 | CHnF | 通道事件標志 | 
3.8、MODE: Features Mode Selection
| Field | Name | Description | 
| 0 | FTMEN | FTM使能 | 
| 1 | INIT | 初始化通道輸出 | 
| 2 | WPDIS | 寫保護禁用 | 
| 3 | PWMSYNC | PWM同步模式 | 
| 4 | CAPTEST | 捕獲測試模式使能 | 
| 5-6 | FAULTM | 故障控制模式 | 
| 7 | FAULTIE | 故障中斷使能 | 
3.9、SYNC: Synchronization
| Field | Name | Description | 
| 0 | CNTMIN | 最小加載點啟用 | 
| 1 | CNTMAX | 最大加載點啟用 | 
| 2 | REINIT | 同步FTM計數器重新初始化 | 
| 3 | SYNCHOM | 輸出掩碼同步 | 
| 4 | TGIG0 | PWM同步硬件觸發0 | 
| 5 | TGIG1 | PWM同步硬件觸發1 | 
| 6 | TGIG2 | PWM同步硬件觸發2 | 
| 7 | SWSYNC | PWM同步軟件觸發器 | 
3.10、OUTINIT: Initial State For Channels Output
| Field | Name | Description | 
| 0-7 | CHnOI | 通道n輸出初始值 | 
3.11、OUTMASK: Output Mask
| Field | Name | Description | 
| 0-7 | CHnOM | 通道n輸出掩碼 | 
3.12、COMBINE: Function For Linked Channels
| Field | Name | Description | 
| 0 | COMBINE0 | 合并通道,用于通道(n)和(n+1)的組合模式的選擇 | 
| 1 | COMP0 | 通道(n)的補碼 | 
| 2 | DECAPEN0 | 啟用雙邊緣捕獲模式 | 
| 3 | DECAP0 | 雙邊捕獲模式捕獲 | 
| 4 | DTEN0 | 死區時間啟用 | 
| 5 | SYNCEN0 | 啟用同步 | 
| 6 | FAULTEN0 | 故障控制使能 | 
| 7 | MCOMBINE0 | 修改合并模式 | 
依次有1-3,總共0-3,0模式已寫
3.13、DEADTIME: Deadtime Configuration ?????
這個寄存器選擇死區時間的分頻器和值
| Field | Name | Description | 
| 0-5 | DTVAL | 死區時間值 | 
| 6-7 | DTPS | 死區時間分頻值 | 
| 16-19 | DTVALEX | 擴展死區時間值 | 
3.14、EXTTRIG: FTM External Trigger
外部觸發器產生的時間,當FTM計數器等于其初始值時,使能生成觸發器,選擇在外部觸發器的生成中使用的通道
| Field | Name | Description | 
| 0 | CH2TRIG | 通道2外部觸發啟用 | 
| 1 | CH3TRIG | 通道3外部觸發啟用 | 
| 2 | CH4TRIG | 通道4外部觸發啟用 | 
| 3 | CH5TRIG | 通道5外部觸發啟用 | 
| 4 | CH0TRIG | 通道0外部觸發啟用 | 
| 5 | CH1TRIG | 通道1外部觸發啟用 | 
| 6 | INITTRIGEN | 初始化觸發使能 | 
| 7 | TRIGF | 通道觸發器標志 | 
| 8 | CH6TRIG | 通道6外部觸發啟用 | 
| 9 | CH7TRIG | 通道7外部觸發啟用 | 
3.15、POL: Channels Polarity
| Field | Name | Description | 
| 0-7 | POLn | 通道n的極性 | 
3.16、FMS: Fault Mode Status
| Field | Name | Description | 
| 0 | FAULTF0 | 故障檢測標志0 | 
| 1 | FAULTF1 | 故障檢測標志1 | 
| 2 | FAULTF2 | 故障檢測標志2 FTM0-3支持此位 FTM4-7不支持 | 
| 3 | FAULTF3 | 故障檢測標志3 | 
| 5 | FAULTIN | 故障輸入 | 
| 6 | WPEN | 啟用寫保護 | 
| 7 | FAULTF | 故障檢測標志 | 
3.17、FILTER: Input Capture Filter Control
這個寄存器為通道的輸入選擇過濾器值。
通道4、5、6和7沒有輸入過濾器
| Field | Name | Description | 
| 0-3 | CH0FVAL | 通道n輸入濾波器 選擇通道輸入的過濾器值。 當值為零時,將禁用篩選器。 | 
| 4-7 | CH1FVAL | |
| 8-11 | CH2FVAL | |
| 12-15 | CH3FVAL | 
3.18、FLTCTRL: Fault Control
| Field | Name | Description | 
| 0 | FAULT0EN | 故障輸入n使能 | 
| 1 | FAULT1EN | |
| 2 | FAULT2EN | |
| 3 | FAULT3EN | |
| 4 | FFLTR0EN | 故障輸入過濾器n使能 | 
| 5 | FFLTR1EN | |
| 6 | FFLTR2EN | |
| 7 | FFLTR3EN | |
| 8-11 | FFVAL | 故障輸入過濾器 | 
| 15 | FSTATE | 故障輸出狀態 | 
3.19、QDCTRL: Quadrature Decoder Control And Status
該寄存器具有控制位和正交解碼器模式的狀態位
| Field | Name | Description | 
| 0 | QUADEN | 正交解碼器模式啟用 | 
| 1 | TOFDIR | 正交解碼器模式下定時器溢出方向 | 
| 2 | QUADIR | 正交解碼器模式下定時器計數方向 | 
| 3 | QUADMODE | 正交解碼器模式 | 
| 4 | PHBPOL | B相輸入極性 | 
| 5 | PHAPOL | A相輸入極性 | 
| 6 | PHBFLTREN | B相輸入過濾器使能 | 
| 7 | PHAFLTREN | A相輸入過濾器使能 | 
3.20、CONF: Configuration
| Field | Name | Description | 
| 0-4 | LDPQ | 重新加載的頻率 | 
| 6-7 | BDMMODE | 調試模式 | 
| 9 | GTBEEN | 全局時基啟用 | 
| 10 | GTBEOUT | 全局時基輸出 | 
| 11 | ITRIGR | 加載點初始化觸發器 | 
3.21、FLTPOL: FTM Fault Input Polarity
這個寄存器定義了故障輸入的極性
| Field | Name | Description | 
| 0-3 | FLTnPOL | 故障輸入n的極性 | 
3.22、SYNCONF: Synchronization Configuration
這個寄存器選擇PWM同步配置
| Field | Name | Description | 
| 0 | HWTRIGMODE | 硬件觸發模式 | 
| 2 | CNTINC | CNTIN寄存器同步 | 
| 4 | INVC | INVCTRL寄存器同步 | 
| 5 | SWOC | SWOCTRL寄存器同步 | 
| 7 | SYNCMODE | 加載點初始化觸發器 | 
| 8 | SWRSTCNT | 同步模式 | 
| 9 | SWWRBUF | FTM計數器同步是由軟件觸發器激活的 | 
| 10 | SWOM | MOD, HCR, CNTIN和CV寄存器同步是由軟件觸發器激活的 | 
| 11 | SWINVC | 輸出掩碼同步是由軟件觸發器激活的 | 
| 12 | SWSOC | 反向控制同步是由軟件觸發器激活的 | 
| 16 | HWRSTCNT | 軟件輸出控制同步由軟件觸發器激活 | 
| 17 | HWWRBUF | FTM計數器同步是由硬件觸發器激活的 | 
| 18 | HWOM | MOD, HCR, CNTIN和CV寄存器同步是由硬件觸發器激活的 | 
| 19 | HWINVC | MOD, HCR, CNTIN和CV寄存器同步是由硬件觸發器激活的 | 
| 20 | HWSOC | 輸出掩碼同步是由硬件觸發器激活的 | 
3.23、INVCTRL: FTM Inverting Control
該寄存器控制何時通道(n)輸出成為通道(n+1)輸出,以及通道(n+1)輸出變為通道(n)輸出。每一個INVmEN位對應對通道m的反相操作。
| Field | Name | Description | 
| 0-3 | INVmEN | 一對通道n反相使能 | 
3.24、SWOCTRL: FTM Software Output Control
該寄存器允許軟件控制通道(n)輸出并定義強制值到通道(n)輸出:
?CH(n)OC位使軟件能夠控制相應的通道(n)輸出。
?CH(n)OCV位選擇對應通道(n)輸出的強制值。
| Field | Name | Description | 
| 0-7 | CHnOC | 通道n軟件輸出控制使能 | 
| 8-15 | CHnOCV | 通道n軟件輸出控制值 | 
3.26、PWMLOAD: FTM PWM Load
當FTM計數器從MOD寄存器的值更改為下一個值或當通道(j)匹配發生時,啟用MOD, HCR, CNTIN, C(n)V,和C(n+1)V用它們的寫緩沖區的值寄存器的重載
| Field | Name | Description | 
| 0-7 | CHnSEL | 通道n選擇 | 
| 8 | HCSEL | 半周期選擇 | 
| 9 | LDOK | 加載使能 | 
| 10 | GLEN | 全局加載使能 | 
| 11 | GLDOK | 全局加載OK | 
3.27、HCR: Half Cycle Register
半周期寄存器包含FTM半周期重新加載特性的匹配值。
| Field | Name | Description | 
| 0-15 | HCVAL | 半周期值 | 
3.28、PAIRnDEADTIME: Pair n Deadtime Configuration
這個寄存器為這對n選擇死時間的分頻器和值。
| Field | Name | Description | 
| 0-5 | DTVAL | 成對死區時間值 | 
| 6-7 | DTPS | 承兌死區時間分頻值 | 
| 16-19 | DTVALEX | 擴展死區時間值 | 
3.29、MOD_MIRROR: Mirror of Modulo Value
這個寄存器包含FTM計數器的整數和小數模值
| Field | Name | Description | 
| 11-15 | FRACMOD | 計數器模值小數部分 | 
| 16-31 | MOD | 計數器模值整數部分 | 
3.30、C0V_MIRROR - C7V_MIRROR: Mirror of Channel (n) Match Value
這個寄存器包含通道(n)匹配的整數和小數值。
| Field | Name | Description | 
| 11-15 | FRACMOD | 通道匹配小數部分 | 
| 16-31 | MOD | 通道匹配整數部分 | 
其中通道模式的選擇如下圖
?
?
?
4、代碼編程
代碼編程可以有:邊沿對齊PWM、中間對齊PWM、輸出比較、輸入捕獲
我偷懶了,其實其他的我也寫了,但是我之前沒保存,尷尬
4.1、ftm.h
#ifndef _FTM_H_ #define _FTM_H_#include "common.h" //公共要素頭文件void FTM0_init(void); void start_FTM0_counter (void); void FTM0_CH0_init(vuint_8 dutyoid); void FTM0_CH1_init(uint_8 duty); #endif4.2、ftm.c
#include "ftm.h"void FTM0_init(void) {PCC->PCCn[PCC_FTM0_INDEX] &= ~PCC_PCCn_CGC_MASK; /* Ensure clk disabled for config */PCC->PCCn[PCC_FTM0_INDEX] |= PCC_PCCn_PCS(1) | PCC_PCCn_CGC_MASK;/* Clock Src=1, 8 MHz SOSCDIV1_CLK *//* Enable clock for FTM regs */FTM0->MODE |= FTM_MODE_WPDIS_MASK; /* Write protect to registers disabled (default) */FTM0->SC |= FTM_SC_PWMEN1_MASK | FTM_SC_PWMEN0_MASK | FTM_SC_PS(7); /* Enable PWM channel 0 output*//* TOIE (Timer Overflow Interrupt Ena) = 0 (default) *//* CPWMS (Center aligned PWM Select) = 0 (default, up count) *//* CLKS (Clock source) = 0 (default, no clock; FTM disabled) *//* PS (Prescaler factor) = 7. Prescaler = 128 */FTM0->COMBINE = 0x00000000;/* FTM mode settings used: DECAPENx, MCOMBINEx, COMBINEx=0 */FTM0->POL = 0x00000000; /* Polarity for all channels is active high (default) */FTM0->MOD = 62500 -1 ; /* FTM1 counter final value (used for PWM mode) *//* FTM1 Period = MOD-CNTIN+0x0001 ~= 62500 ctr clks *//* 8MHz / 128 = 62500Hz -> ticks -> 1Hz */FTM0->SC |= FTM_SC_CPWMS_MASK; } void FTM0_CH0_init(uint_8 duty) {//mode selectFTM0->CONTROLS[0].CnSC = FTM_CnSC_ELSB_MASK;/* FTM0 ch0 compare value (~50% duty cycle) */FTM0->CONTROLS[0].CnV = (FTM0->MOD+1)*duty/100; }void FTM0_CH1_init(uint_8 duty) {//mode selectFTM0->CONTROLS[1].CnSC = FTM_CnSC_ELSB_MASK;/* FTM0 ch1 compare value (~50% duty cycle) */FTM0->CONTROLS[1].CnV = (FTM0->MOD+1)*duty/100; } void start_FTM0_counter (void) {FTM0->SC |= FTM_SC_CLKS(3);/* Start FTM0 counter with clk source = external clock (SOSCDIV1_CLK)*/ }4.3、main.c
調用偽代碼,因為全貼的話,我之前
FTM0_init(); FTM0_CH0_init(50); /* Init FTM0 CH0 */ FTM0_CH1_init(50); /* Init FTM0 CH0 */ PCC->PCCn[PCC_PORTD_INDEX ]|=PCC_PCCn_CGC_MASK; PORTD->PCR[15]=PORT_PCR_MUX(2); /* Port D15: MUX = ALT2, FTM0CH0 */ PORTD->PCR[16]=PORT_PCR_MUX(2); /* Port D16: MUX = ALT2, FTM0CH1 */ start_FTM0_counter(); /* Start FTM0 counter */4.4、irq
這部分沒貼出來,但是FTM一般有兩個中斷,一個是計數的溢出中斷,一個是通道觸發中斷
/* 使能溢出中斷 */ FTM0->SC |= FTM_SC_TOF(1); /* 注冊中斷 */ S32_NVIC_EnableIRQ(FTM0_Ovf_Reload_IRQn,10); /* 中斷服務函數 */ void FTM0_Ovf_Reload_IRQHandler(void) {FTM0->SC &= ~FTM_SC_TOF(1); //清中斷標志位 }/* 使能溢出中斷 */ FTM0->CONTROLS[0].CnSC |= FTM_CnSC_CHIE_MASK; /* 注冊中斷 */ S32_NVIC_EnableIRQ(FTM0_Ch0_Ch1_IRQn,10); /* 中斷服務函數 */ void FTM0_Ch0_Ch1_IRQHandler(void) {if((FTM0->CONTROLS[0].CnSC & FTM_CnSC_CHF_MASK)){FTM0->CONTROLS[0].CnSC &= ~FTM_CnSC_CHF_MASK;}if((FTM0->CONTROLS[1].CnSC & FTM_CnSC_CHF_MASK)){FTM0->CONTROLS[1].CnSC &= ~FTM_CnSC_CHF_MASK;} }?
總結
以上是生活随笔為你收集整理的S32K144(12)FTM的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: c语言课程设计作业心得体会,【c语言课程
- 下一篇: PAT 甲级1069/乙级 1019 P
