BJX 302A BLDC驱动器——6BLDC三段启动闭环
1 void ClosedLoop(void) 2 { 3 if(AccelerateStep == 1) 4 { 5 if(SwPointDly < SwStepSpeedTime/5) 6 { 7 SwPointDly++; 8 ZeroFlg = 0; 9 } 10 if(SwPointDly >= SwStepSpeedTime/5) //换相后的5ms做滤波 11 { 12 if(RunDir) 13 { 14 if(AD_ValueW >= AD_ValueCom) 15 { 16 //检测到过零点 17 ZeroFlg = 1; 18 } 19 } 20 else 21 { 22 if(AD_ValueW <= AD_ValueCom) 23 { 24 //检测到过零点 25 ZeroFlg = 1; 26 } 27 28 } 29 if(ZeroFlg) 30 { 31 SwStepDlyCnt ++; 32 if(SwStepDlyCnt >= SwStepSpeedTime/2) 33 { 34 if(RunDir) 35 { 36 AccelerateStep--; 37 if(AccelerateStep == 0) 38 { 39 AccelerateStep = 6; 40 } 41 } 42 else 43 { 44 AccelerateStep++; 45 if(AccelerateStep >= 7) 46 { 47 AccelerateStep = 0; 48 } 49 } 50 51 } 52 } 53 else 54 { 55 SwStepDlyCnt = 0; 56 } 57 } 58 } 59 else if(AccelerateStep == 2) 60 { 61 if(SwPointDly < SwStepSpeedTime/5) 62 { 63 SwPointDly++; 64 ZeroFlg = 0; 65 } 66 if(SwPointDly >= SwStepSpeedTime/5) //换相后的5ms做滤波 67 { 68 if(RunDir) 69 { 70 if(AD_ValueV <= AD_ValueCom) 71 { 72 //检测到过零点 73 ZeroFlg = 1; 74 } 75 } 76 else 77 { 78 if(AD_ValueV >= AD_ValueCom) 79 { 80 //检测到过零点 81 ZeroFlg = 1; 82 } 83 84 } 85 if(ZeroFlg) 86 { 87 SwStepDlyCnt ++; 88 if(SwStepDlyCnt >= SwStepSpeedTime/2) 89 { 90 if(RunDir) 91 { 92 AccelerateStep--; 93 if(AccelerateStep == 0) 94 { 95 AccelerateStep = 6; 96 } 97 } 98 else 99 { 100 AccelerateStep++; 101 if(AccelerateStep >= 7) 102 { 103 AccelerateStep = 0; 104 } 105 } 106 107 } 108 } 109 else 110 { 111 SwStepDlyCnt = 0; 112 } 113 } 114 } 115 else if(AccelerateStep == 3) 116 { 117 if(SwPointDly < SwStepSpeedTime/5) 118 { 119 SwPointDly++; 120 ZeroFlg = 0; 121 } 122 if(SwPointDly >= SwStepSpeedTime/5) //换相后的5ms做滤波 123 { 124 if(RunDir) 125 { 126 if(AD_ValueU >= AD_ValueCom) 127 { 128 //检测到过零点 129 ZeroFlg = 1; 130 } 131 } 132 else 133 { 134 if(AD_ValueU <= AD_ValueCom) 135 { 136 //检测到过零点 137 ZeroFlg = 1; 138 } 139 140 } 141 if(ZeroFlg) 142 { 143 SwStepDlyCnt ++; 144 if(SwStepDlyCnt >= SwStepSpeedTime/2) 145 { 146 if(RunDir) 147 { 148 AccelerateStep--; 149 if(AccelerateStep == 0) 150 { 151 AccelerateStep = 6; 152 } 153 } 154 else 155 { 156 AccelerateStep++; 157 if(AccelerateStep >= 7) 158 { 159 AccelerateStep = 0; 160 } 161 } 162 163 } 164 } 165 else 166 { 167 SwStepDlyCnt = 0; 168 } 169 } 170 } 171 else if(AccelerateStep == 4) 172 { 173 if(SwPointDly < SwStepSpeedTime/5) 174 { 175 SwPointDly++; 176 ZeroFlg = 0; 177 } 178 if(SwPointDly >= SwStepSpeedTime/5) //换相后的5ms做滤波 179 { 180 if(RunDir) 181 { 182 if(AD_ValueW <= AD_ValueCom) 183 { 184 //检测到过零点 185 ZeroFlg = 1; 186 } 187 } 188 else 189 { 190 if(AD_ValueW >= AD_ValueCom) 191 { 192 //检测到过零点 193 ZeroFlg = 1; 194 } 195 196 } 197 if(ZeroFlg) 198 { 199 SwStepDlyCnt ++; 200 if(SwStepDlyCnt >= SwStepSpeedTime/2) 201 { 202 if(RunDir) 203 { 204 AccelerateStep--; 205 if(AccelerateStep == 0) 206 { 207 AccelerateStep = 6; 208 } 209 } 210 else 211 { 212 AccelerateStep++; 213 if(AccelerateStep >= 7) 214 { 215 AccelerateStep = 0; 216 } 217 } 218 219 } 220 } 221 else 222 { 223 SwStepDlyCnt = 0; 224 } 225 } 226 } 227 else if(AccelerateStep == 5) 228 { 229 if(SwPointDly < SwStepSpeedTime/5) 230 { 231 SwPointDly++; 232 ZeroFlg = 0; 233 } 234 if(SwPointDly >= SwStepSpeedTime/5) //换相后的5ms做滤波 235 { 236 if(RunDir) 237 { 238 if(AD_ValueV >= AD_ValueCom) 239 { 240 //检测到过零点 241 ZeroFlg = 1; 242 } 243 } 244 else 245 { 246 if(AD_ValueV <= AD_ValueCom) 247 { 248 //检测到过零点 249 ZeroFlg = 1; 250 } 251 252 } 253 if(ZeroFlg) 254 { 255 SwStepDlyCnt ++; 256 if(SwStepDlyCnt >= SwStepSpeedTime/2) 257 { 258 if(RunDir) 259 { 260 AccelerateStep--; 261 if(AccelerateStep == 0) 262 { 263 AccelerateStep = 6; 264 } 265 } 266 else 267 { 268 AccelerateStep++; 269 if(AccelerateStep >= 7) 270 { 271 AccelerateStep = 0; 272 } 273 } 274 275 } 276 } 277 else 278 { 279 SwStepDlyCnt = 0; 280 } 281 } 282 } 283 else if(AccelerateStep == 6) 284 { 285 if(SwPointDly < SwStepSpeedTime/5) 286 { 287 SwPointDly++; 288 ZeroFlg = 0; 289 } 290 if(SwPointDly >= SwStepSpeedTime/5) //换相后的5ms做滤波 291 { 292 if(RunDir) 293 { 294 if(AD_ValueU <= AD_ValueCom) 295 { 296 //检测到过零点 297 ZeroFlg = 1; 298 } 299 } 300 else 301 { 302 if(AD_ValueU >= AD_ValueCom) 303 { 304 //检测到过零点 305 ZeroFlg = 1; 306 } 307 308 } 309 if(ZeroFlg) 310 { 311 SwStepDlyCnt ++; 312 if(SwStepDlyCnt >= SwStepSpeedTime/2) 313 { 314 if(RunDir) 315 { 316 AccelerateStep--; 317 if(AccelerateStep == 0) 318 { 319 AccelerateStep = 6; 320 } 321 } 322 else 323 { 324 AccelerateStep++; 325 if(AccelerateStep >= 7) 326 { 327 AccelerateStep = 0; 328 } 329 } 330 331 } 332 } 333 else 334 { 335 SwStepDlyCnt = 0; 336 } 337 } 338 } 339 340 PwmDuty(PointCurVlue,PointCurVlue,PointCurVlue); 341 SixStep(AccelerateStep); 342 }
正反转切换只需要切换换相顺序即可,正转步序1到6顺序循环,反转步序6到1的顺序循环。

浙公网安备 33010602011771号