●第1章 緒論
1.1 電機控制和電源變換技術的發展1
1.2 微處理器在電機調速和電源變換技術中的應用3
1.3 用於電機和電源數字控制繫統的DSP的特點5
第2章 dsPIC30F電機控制及電源變換繫列DSC的主要性能
2.1 基本性能特征9
2.2 芯片類型與引腳功能11
2.2.1 dsPIC30F電機控制和電源變換繫列芯片概況11
2.2.2 dsPIC30F電機控制和電源變換繫列芯片的引腳功能12
2.3 器件絕對極限參數值16
2.4 dsPIC30F器件型號表示方法17
2.5 dsPIC30F電機控制和電源變換繫列DSC器件外形封裝17
第3章 dsPIC30F繫列DSC的CPU結構
3.1 編程模型22
3.1.1 軟件堆棧指針24
3.1.2 CPU寄存器28
3.2 算術33
3.3 指令流34
3.4 除法支持37
3.5 DSP引擎38
3.5.1 乘法器39
3.5.2 數據累加器和加法/減法器42
3.5.3 四舍五入邏輯44
3.5.4 數據空間寫飽和44
3.5.5 桶形移位器45
3.5.6 DSP 引擎陷阱事件45
3.6 循環結構46
3.6.1 REPEAT 循環結構46
3.6.2 DO循環結構47
3.7 dsPIC30F CPU內核寄存器映射51
第4章 存儲器結構
4.1 程序計數器54
4.2 從程序存儲器存取數據54
4.2.1 表指令綜述56
4.2.2 表地址的生成57
4.2.3 程序存儲器低位字訪問57
4.2.4 程序存儲器高位字訪問57
4.2.5 程序存儲器中的數據存儲58
4.3 來自數據空間的程序空間可視性58
4.3.1 PSV的配置58
4.3.2 X和Y數據空間的PSV映射59
4.3.3 PSV時序59
4.3.4 在REPEAT循環中使用PSV60
4.3.5 PSV和指令停頓60
4.4 寫程序存儲器60
4.5 數據存儲器60
4.5.1 數據存儲器空間62
4.5.2 數據對齊方式63
4.6 Near 數據存儲器63
第5章 地址發生器
5.1 數據空間地址發65
5.1.1 X地址發65
5.1.2 Y地址發65
5.1.3 地址發和DSP指令65
5.2 指令尋址模式66
5.2.1 文件寄存器指令66
5.2.2 MCU乘法指令67
5.2.3 MOVE和累加器指令67
5.2.4 MAC指令68
5.2.5 其他指令69
5.3 指令停止69
5.3.1 地址寄存器相依性69
5.3.2 先寫後讀相依性規則70
5.3.3 指令停止周期71
5.4 模尋址72
5.4.1 模起始和結束地址選擇72
5.4.2 模起始地址73
5.4.3 模結束地址73
5.4.4 模地址計算73
5.4.5 與模尋址SFR相關的數據依賴關繫74
5.4.6 W地址寄存器的選擇75
5.4.7 模尋址的適用性76
5.4.8 遞增模緩衝區的模尋址的初始化76
5.4.9 遞減模緩衝區的模尋址的初始化77
5.5 位反轉尋址78
5.5.1 位反轉尋址簡介78
5.5.2 位反轉尋址操作79
5.5.3 模尋址和位反轉尋址80
5.5.4 與XBREV相關的數據相依性80
5.5.5 位反轉修改量80
5.5.6 位反轉尋址代碼示例81
5.5.7 控制寄存器說明82
第6章 中斷
6.1 中斷向量與優先級86
6.1.1 中斷向量表86
6.1.2 備用向量表87
6.1.3 復位順序87
6.1.4 CPU優先級狀態88
6.1.5 中斷優先級88
6.2 不可屏蔽陷阱91
6.2.1 軟陷阱91
6.2.2 硬陷阱92
6.2.3 禁止中斷指令93
6.2.4 中斷操作94
6.2.5 從休眠和空閑模式喚醒95
6.2.6 A/D轉換器外部轉換請求95
6.2.7 外部中斷支持96
6.3 中斷處理時序96
6.3.1 單周期指令的中斷延遲96
6.3.2 雙周期指令的中斷延遲97
6.3.3 從中斷返回98
6.3.4 中斷延遲的特殊條件98
6.4 中斷控制和狀態寄存器98
6.5 中斷設置流程121
6.5.1 初始化121
6.5.2 中斷服務程序121
6.5.3 陷阱服務程序122
6.5.4 中斷禁止122
第7章 閃存程序存儲器
7.1 表指令操作123
7.1.1 使用讀表指令124
7.1.2 使用寫表指令125
7.2 控制寄存器126
7.2.1 NVMCON寄存器127
7.2.2 NVM地址寄存器128
7.2.3 NVMKEY寄存器129
7.3 運行時自編程130
7.3.1 RTSP工作原理130
7.3.2 閃存編程操作131
7.3.3 寫入器件配置寄存器135
第8章 電可擦除數據隻讀存儲器
8.1 數據EEPROM編程簡介137
8.2 EEPROM編程算法138
8.2.1 EEPROM單字編程算法138
8.2.2 EEPROM行編程算法138
8.3 數據EEPROM存儲器字寫入139
8.3.1 擦除數據EEPROM存儲器的1個字139
8.3.2 寫數據EEPROM存儲器中的1個字140
8.4 寫數據EEPROM存儲器中的1行141
8.4.1 擦除數據EEPROM的1行141
8.4.2 寫數據EEPROM存儲器的1行142
8.5 讀數據EEPROM存儲器143
第9章 輸入/輸出端口
9.1 I/O端口控制寄存器144
9.1.1 TRIS寄存器145
9.1.2 PORT寄存器145
9.1.3 LAT寄存器145
9.2 外設復用150
9.3 端口描述152
9.4 電平變化通知引腳152
9.4.1 CN 控制寄存器153
9.4.2 CN的配置和操作154
9.4.3 休眠和空閑模式下的CN工作155
第10章 定時器
10.1 定時器的類型156
10.1.1 A類型定時器157
10.1.2 B類型定時器157
10.1.3 C類型定時器158
10.2 控制寄存器159
10.3 工作模式162
10.3.1 定時器模式162
10.3.2 使用外部時鐘輸入的同步計數器模式164
10.3.3 使用外部時鐘輸入的A類型定時器異步計數器模式165
10.3.4 使用快速外部時鐘源的定時器工作原理166
10.3.5 門控時間累加模式166
10.4 定時器預分頻器168
10.5 定時器中斷168
10.6 讀/寫16位定時器模塊寄存器169
10.6.1 寫16位定時器169
10.6.2 讀16位定時器169
10.7 低功耗32 kHz晶振輸入169
10.8 32位定時器配置170
10.9 32位定時器的工作模式171
10.9.1 定時器模式171
10.9.2 同步計數器模式172
10.9.3 異步計數器模式173
10.9.4 門控時間累加模式173
10.10 讀/寫32位定時器174
10.11 低功耗狀態下的定時器工作174
10.11.1 休眠模式下的定時器工作174
10.11.2 空閑模式下的定時器工作175
10.11.3 Timer1中斷喚醒器件應用示例175
10.12 使用定時器模塊的外設176
10.12.1 輸入捕捉/輸出比較的時基176
10.12.2 A/D特殊事件觸發信號176
10.12.3 定時器作為外部中斷引腳176
10.12.4 I/O引腳控制176
第11章 輸入捕捉
11.1 輸入捕捉寄存器178
11.2 定時器選擇179
11.3 輸入捕捉事件模式180
11.3.1 簡單捕捉事件180
11.3.2 預分頻器捕捉事件181
11.3.3 邊沿檢測模式182
11.4 捕捉緩衝器的操作183
11.4.1 輸入捕捉緩衝器非空184
11.4.2 輸入捕捉溢出184
11.5 輸入捕捉中斷184
11.6 UART自動波特率支持185
11.7 低功耗狀態下的輸入捕捉工作185
11.7.1 休眠模式下的輸入捕捉工作185
11.7.2 空閑模式下的輸入捕捉工作185
11.7.3 器件從休眠/空閑中喚醒186
11.8 I/O引腳控制186
11.9 與輸入捕捉模塊相關的特殊功能寄存器表186
第12章 輸出比較
12.1 輸出比較寄存器189
12.2 工作模式190
12.2.1 單比較匹配模式190
12.2.2 雙比較匹配模式194
12.2.3 脈寬調制模式200
12.3 低功耗狀態下的輸出比較工作205
12.3.1 休眠模式下的輸出比較工作205
12.3.2 空閑模式下的輸出比較工作205
12.4 I/O引腳控制206
第13章 正交編碼器接口
13.1 控制和狀態寄存器209
13.2 可編程數字噪聲濾波器214
13.3 正交解碼器216
13.3.1 超前/滯後測試說明217
13.3.2 計數方向狀態218
13.3.3 編碼器計數方向218
13.3.4 正交速率218
13.4 16位向上/向下位置計數器218
13.4.1 位置計數器的使用219
13.4.2 使用MAXCNT復位位置計數器219
13.4.3 使用索引復位位置計數器220
13.5 QEI用作備用16位定時器/計數器223
13.5.1 向上/向下定時器的工作223
13.5.2 定時器外部時鐘223
13.5.3 定時器門控操作224
13.6 正交編碼器接口中斷224
13.7I/O 引腳控制224
13.8 低功耗模式下的QEI 工作225
13.8.1 器件進入休眠模式225
13.8.2 器件進入空閑模式225
13.9 復位的影響226
13.10 正交編碼器使用中應注意的問題226
第14章 電機控制脈寬調制模塊
14.1 多種MCPWM 模塊227
14.2 控制寄存器229
14.3 PWM時基238
14.3.1 自由運行模式239
14.3.2 單事件模式240
14.3.3 向上/向下計數模式240
14.3.4 PWM時基預分頻器240
14.3.5 PWM時基後分頻器240
14.3.6 PWM時基中斷240
14.3.7 PWM周期241
14.4 PWM占空比242
14.4.1 PWM占空比精度242
14.4.2 邊沿對齊的PWM244
14.4.3 單事件PWM 工作244
14.4.4 中心對齊的PWM245
14.4.5 占空比寄存器緩衝246
14.5 互補PWM輸出模式247
14.6 死區時間控制248
14.6.1 死區時間發生器248
14.6.2 死區時間分配249
14.6.3 死區時間範圍250
14.6.4 死區時間失真250
14.7 獨立PWM 輸出模式251
14.8 PWM輸出改寫251
14.8.1 互補輸出模式的改寫控制252
14.8.2 改寫同步252
14.8.3 輸出改寫示例252
14.9 PWM輸出和極性控制254
14.9.1 輸出極性控制254
14.9.2 PWM輸出引腳復位狀態254
14.10 PWM故障引腳254
14.10.1 故障引腳使能位255
14.10.2 故障狀態255
14.10.3 故障輸入模式255
14.10.4 故障引腳優先級256
14.10.5 故障引腳軟件控制256
14.10.6 故障時序示例257
14.11 PWM更新鎖定258
14.12 PWM特殊事件觸發器258
14.12.1 特殊事件觸發器使能259
14.12.2 特殊事件觸發器後分頻器259
14.13 器件低功耗模式下的工作259
14.13.1 休眠模式下的PWM工作259
14.13.2 空閑模式下的PWM工作260
14.14 用於器件仿真的特殊功能260
14.15 與PWM模塊有關的寄存器映射表260
第15章 串行外設接口
15.1 dsPIC30F的SPI模塊263
15.2 狀態和控制寄存器264
15.3 工作模式267
15.3.1 8位與16位工作模式267
15.3.2 主控模式和從動模式268
15.3.3 SPI錯誤處理274
15.3.4 SPI僅啟用接收功能時的工作原理274
15.3.5 幀SPI模式274
15.4 SPI主控模式時鐘頻率278
15.5 低功耗模式下的工作279
15.5.1 休眠模式279
15.5.2 空閑模式280
15.6 與SPI模塊相關的特殊功能寄存器280
第16章 I2C通信模塊
16.1 dsPIC30F的I2C模塊282
16.2 I2C總線特性283
16.2.1 總線協議284
16.2.2 報文協議285
16.3 控制和狀態寄存器286
16.4 使能I2C操作292
16.4.1 使能I2C I/O292
16.4.2 I2C中斷292
16.4.3 當作為總線主器件工作時設置波特率293
16.5 作為主器件在單主機環境下通信294
16.5.1 產生啟動總線事件295
16.5.2 發送數據到從器件296
16.5.3 接收來自從器件的數據298
16.5.4 應答產生299
16.5.5 產生停止總線事件300
16.5.6 產生重復啟動總線事件301
16.5.7 建立完整的主器件報文302
16.6 作為主器件在多主機環境下通信302
16.6.1 多主機工作303
16.6.2 主器件時鐘同步303
16.6.3 總線仲裁與總線衝突304
16.6.4 檢測總線衝突和重新發送報文304
16.6.5 啟動條件期間的總線衝突304
16.6.6 重復啟動條件期間的總線衝突305
16.6.7 報文位發送期間的總線衝突305
16.6.8 停止條件期間的總線衝突305
16.7 作為從器件通信305
16.7.1 采樣接收的數據306
16.7.2 檢測啟動和停止條件306
16.7.3 檢測地址306
16.7.4 接收來自主器件的數據311
16.7.5 發送數據到主器件313
16.8 I2C總線的連接注意事項314
16.9 在PWRSAV指令執行期間的模塊操作315
16.9.1 器件進入休眠模式315
16.9.2 器件進入空閑模式315
16.10 復位的影響316
16.11 I2C器件的地址格式316
16.12 I2C總線通信中的若干問題316
第17章 通用異步收發器模塊
17.1 控制寄存器319
17.2 UART波特率發生器322
17.3 UART配置325
17.3.1 使能UART325
17.3.2 禁止UART325
17.3.3 備用UART I/O引腳325
17.4 UART發送器326
17.4.1 發送緩衝器327
17.4.2 發送中斷327
17.4.3 設置UART發送328
17.4.4 中止字符的發送329
17.5 UART接收器329
17.5.1 接收緩衝器330
17.5.2 接收器錯誤處理330
17.5.3 接收中斷331
17.5.4 設置UART接收331
17.6 使用UART 進行9 位通信332
17.6.1 ADDEN控制位333
17.6.2 設置9位發送333
17.6.3 設置使用地址檢測模式的9位接收333
17.7 接收中止字符334
17.8 初始化334
17.9 UART的其他特性336
17.9.1 環回模式下的UART336
17.9.2 自動波特率支持336
17.10 UART在CPU休眠和空閑模式下的工作337
17.11 與UART模塊相關的寄存器337
17.12 UART通信設計中可能出現的問題及解決方法337
第18章 CAN總線模塊
18.1 dsPIC30F集成的CAN模塊組成的總線網絡339
18.2 CAN模塊特點339
18.3 CAN模塊的控制寄存器340
18.3.1 CAN控制和狀態寄存器348
18.3.2 CAN發送緩衝寄存器349
18.3.3 CAN接收緩衝寄存器352
18.3.4 報文接收過濾器355
18.3.5 接收過濾器屏蔽寄存器356
18.3.6 CAN波特率寄存器357
18.3.7 CAN模塊錯誤計數寄存器359
18.3.8 CAN中斷寄存器359
18.4 CAN模塊的實現362
18.5 CAN模塊工作模式370
18.5.1 正常工作模式370
18.5.2 禁止模式370
18.5.3 環回模式371
18.5.4 監聽模式371
18.5.5 配置模式372
18.5.6 監聽所有報文模式372
18.6 報文接收372
18.6.1 接收緩衝器372
18.6.2 報文接收過濾器375
18.6.3 接收器溢出376
18.6.4 復位的影響378
18.6.5 接收錯誤378
18.6.6 接收中斷379
18.7 發送381
18.7.1 實時通信和發送報文緩衝381
18.7.2 發送報文緩衝器382
18.7.3 發送報文優先級382
18.7.4 報文發送383
18.7.5 發送報文中止383
18.7.6 發送邊界條件385
18.7.7 復位的影響387
18.7.8 發送錯誤387
18.7.9 發送中斷389
18.8 錯誤檢測389
18.8.1 錯誤狀態390
18.8.2 錯誤模式和錯誤計數器390
18.8.3 錯誤標志寄存器391
18.9 CAN波特率391
18.9.1 位時序392
18.9.2 預分頻器設置392
18.9.3 傳播段393
18.9.4 相位段393
18.9.5 采樣點394
18.9.6 同步394
18.9.7 時間段編程395
18.10 中斷395
18.10.1 中斷確認396
18.10.2 ICODE位396
18.11 時間標記397
18.12 CAN模塊I/O397
18.13 CPU低功耗模式下的工作397
18.13.1 休眠模式下的工作397
18.13.2 CPU空閑模式下的CAN模塊工作399
第19章 10位A/D轉換器
19.1 dsPIC30F的10位A/D轉換器的結構400
19.2 控制寄存器402
19.3 A/D轉換結果緩衝器402
19.4 A/D轉換術語和轉換過程407
19.5 A/D模塊配置409
19.6 參考電壓源的選擇410
19.7 A/D轉換時鐘的選擇410
19.8 采樣模擬輸入的選擇411
19.8.1 配置模擬端口引腳411
19.8.2 通道0輸入選擇411
19.8.3 通道1、2 和3輸入選擇412
19.9 模塊使能413
19.10 采樣/轉換過程的說明413
19.10.1 采樣/保持通道的數量413
19.10.2 同時采樣使能413
19.11 如何開始采樣414
19.11.1 手工414
19.11.2 自動415
19.12 如何停止采樣和開始轉換415
19.12.1 手工416
19.12.2 對轉換觸發計時417
19.12.3 事件觸發轉換開始421
19.13 采樣/轉換工作的控制425
19.13.1 監視采樣/轉換狀態425
19.13.2 產生A/D中斷425
19.13.3 中止采樣425
19.13.4 中止轉換425
19.14 如何將轉換結果寫入緩衝器的說明426
19.14.1 每次中斷前的轉換次數426
19.14.2 緩衝器大小造成的426
19.14.3 緩衝器填充模式426
19.14.4 緩衝器填充狀態426
19.15 轉換過程示例427
19.15.1 單個通道的多次采樣和轉換示例427
19.15.2 掃描所有模擬輸入時的A/D轉換示例428
19.15.3 在掃描其他4個輸入時頻繁采樣3個輸入示例429
19.15.4 使用雙8字緩衝器示例431
19.15.5 使用交替多路開關A、多路開關B輸入選擇示例431
19.15.6 使用同時采樣對8個輸入進行采樣的示例434
19.15.7 使用順序采樣對8個輸入進行采樣的示例435
19.16 A/D采樣要求437
19.17 讀取A/D轉換結果緩衝器437
19.18 傳遞函數438
19.19 A/D轉換的精度/誤差439
19.20 連接注意事項439
19.21 初始化440
19.22 在休眠和空閑模式下工作441
19.22.1 不使用RC A/D時鐘的CPU休眠模式441
19.22.2 使用RC A/D時鐘的CPU休眠模式441
19.22.3 CPU空閑模式下的A/D工作441
19.23 復位的影響442
19.24 與10位A/D轉換器相關的特殊功能寄存器442
19.25 關於A/D轉換器繫統性能的優化442
第20章 繫統綜合特性
20.1 振蕩器繫統及其工作原理444
20.1.1 振蕩器繫統功能綜述445
20.1.2 CPU時鐘機制446
20.1.3 振蕩器配置447
20.1.4 振蕩器控制寄存器449
20.1.5 主振蕩器451
20.1.6 晶體振蕩器/陶瓷諧振器452
20.1.7 為晶振、時鐘模式、C1、C2和RS確定很好的值454
20.1.8 外部時鐘輸入456
20.1.9 外部RC振蕩器456
20.1.10 鎖相環458
20.1.11 低功耗32 kHz晶體振蕩器459
20.1.12 振蕩器起振定時器460
20.1.13 內部快速RC振蕩器460
20.1.14 內部低功耗RC振蕩器460
20.1.15 故障保護時鐘監視器461
20.1.16 可編程振蕩器後分頻器462
20.1.17 時鐘切換工作原理463
20.1.18 振蕩器電路出現的非正常現像及處理措施466
20.2 復位模塊467
20.2.1 復位控制寄存器468
20.2.2 復位時的時鐘源選擇469
20.2.3 上電復位470
20.2.4 外部復位471
20.2.5 軟件復位指令472
20.2.6 看門狗超時復位472
20.2.7 欠壓復位472
20.2.8 使用RCON狀態位474
20.2.9 器件復位時間474
20.2.10 器件起振時間曲線476
20.2.11 特殊功能寄存器復位狀態478
20.2.12 復位模塊使用中要注意的問題478
20.3 看門狗定時器和低功耗模式479
20.3.1 低功耗模式479
20.3.2 休眠模式479
20.3.3 空閑模式482
20.3.4 低功耗指令與中斷同時發生483
20.3.5 看門狗定時器483
20.3.6 看門狗定時器和低功耗模式使用中的問題486
20.4 低壓檢測模塊486
20.4.1 LVD控制位和跳變點的選擇487
20.4.2 LVD工作原理489
20.4.3 LVD模塊使用中的有關問題490
20.5 器件配置寄存器490
20.5.1 器件配置寄存器491
20.5.2 配置位描述495
20.5.3 器件標識寄存器496
第21章 指令繫統
21.1 dsPIC30F指令的分類497
21.2 dsPIC30F指令的操作數497
21.3 指令長度和執行周期498
21.4 dsPIC30F指令簡述499
第22章 開發環境與工具
22.1 MPLAB IDE集成開發環境軟件510
22.1.1 dsPIC語言套件512
22.1.2 第3方C編譯器512
22.2 仿真器與在線調試器512
22.2.1 MPLAB SIM軟件模擬器512
22.2.2 MPLAB ICE 4000在線仿真器513
22.2.3 MPLAB ICD 2在線調試器514
22.2.4 PRO MATE II通用器件編程器515
22.3 應用程序庫515
22.3.1 數學庫515
22.3.2 DSP算法庫515
22.3.3 DSP濾波器設計軟件實用程序516
22.3.4 外設驅動程序庫516
22.3.5 CAN庫517
22.3.6 實時操作繫統517
22.3.7 OSEK操作繫統518
22.3.8 TCP/IP協議棧518
22.3.9 V0.22/V0.22bis和V0.32規範519
22.4 dsPIC30F硬件開發板519
22.4.1 dsPICDEM MC1電機控制開發板及配套組件519
22.4.2 dsPICDEM 2.0開發板520
22.5 使用MPLAB IDE實現嵌入式繫統設計的一般步驟521
22.5.1 創建文件522
22.5.2 使用項目向導523
22.5.3 使用項目窗口526
22.5.4 設置編譯選項526
22.5.5 編譯項目528
22.5.6 編譯錯誤疑難解答530
22.5.7 使用MPLAB SIM軟件模擬器進行調試531
22.5.8 生成映射文件534
22.5.9 彙編代碼的調試535
22.5.10 用戶繫統在線調試接口設計537
第23章 dsPIC30F用於單相交流電機調速控制
23.1 交流感應電機的V/F控制539
23.2 單相交流感應電機的啟動和運行540
23.3 單相感應電機變頻調速的逆變器功率主電路541
23.4 dsPIC30F2010組成的控制電路542
23.5 3橋臂兩相SPWM控制策略及編程543
23.5.1 SPWM調制544
23.5.2 產生正弦波的查表方法547
23.5.3 ADC采樣和PWM輸出設置550
第24章 dsPIC30F用於交流電機矢量控制
24.1 感應電機矢量控制的實現步驟554
24.2 坐標變換的實現555
24.2.1 CLARKE變換555
24.2.2 PARK變換555
24.2.3 PARK反變換556
24.2.4 CLARKE反變換556
24.3 磁通觀察器557
24.4 PI控制558
24.5 空間矢量調制559
24.6 源程序說明560
24.6.1 變量定義和定標560
24.6.2 UserParms.h561
24.6.3 ACIM.c561
24.6.4 InitCurModel.c562
24.6.5 CalcRef.s562
24.6.6 CalcVel.s562
24.6.7 ClarkePark.s562
24.6.8 CurModel.s563
24.6.9 FdWeak.s563
24.6.10 InvPark.s563
24.6.11 MeasCur.s564
24.6.12 OpenLoop.s564
24.6.13 PI.s564
24.6.14 ReadADC0.s564
24.6.15 SVGen.s564
24.6.16 Trig.s564
第25章 dsPIC30F在無刷直流電機控制方面的應用
25.1電機的運行與PWM調速控制567
25.2 開環控制570
25.3 閉環控制574
第26章 dsPIC30F在電源變換器中的應用
26.1 組合式三相/單相可編程數字逆變電源583
26.2 電流SPWM倍頻調制方式及數字實現584
26.3 電壓/電流雙環數字PI控制586
26.4 控制程序設計587
參考文獻590