Upgrade to Pro — share decks privately, control downloads, hide ads and more …

モデルベース開発モータ制御編~C言語とSimulinkの文法記述を比較する~

84931a5617d844ecfda982721de3a9e9?s=47 k-abe
December 24, 2021

 モデルベース開発モータ制御編~C言語とSimulinkの文法記述を比較する~

■資料概要
2020/10/29 社内勉強会向けに作成した資料。
ブラシレスモータ制御のC言語実装とSimilinkモデルを比較しています。
C言語の実装をSimulinkでどう表現するのか書いています。

■開発環境
●Simulink (MATLAB R2019b)
●Simulink Support Package for Arduino Hardware 19.2.3

■MATLABライセンス
個人用途MATLAB Home

■関連動画
【MATLAB EXPOライトニングトーク】:2020年10月
モデルベース開発初心者がブラシレスモーター制御モデルを作る
https://youtu.be/09AL95ojn-s

84931a5617d844ecfda982721de3a9e9?s=128

k-abe

December 24, 2021
Tweet

More Decks by k-abe

Other Decks in Programming

Transcript

  1. Ϟσϧϕʔε։ൃ
 Ϟʔλ੍ޚฤ
 ʙCݴޠͱSimulinkͷจ๏هड़Λൺֱ͢Δʙ 2020/10/29 Ѩ෦ ߞೋ

  2. ɹɹɹɹɹɹɹɹɹɹɹɹ໨࣍ ▪ࣗݾ঺հ ▪ߨ࠲֓ཁ ▪Ϟʔλ੍ޚ֓ཁ ▪ CݴޠɾSimulinkϞσϧͷهड़ൺֱ

  3. ࣗݾ঺հ

  4. •໊લɿѨ෦ɹߞೋ •࢓ࣄɿ૊ࠐΈιϑτ΢ΣΞ։ൃɻ ɹʮCݴޠʯΛར༻ɻ •MATLABܦݧɿݕূۀ຿͸ܦݧ͋Γɻ ɹۀ຿Ͱීஈ࢖͍ͬͯͳ͍ɻ ɹࣗݾֶशΛ࢝Ίͨɻ ɹɹ㱺ॳ৺ऀ

  5. ߨ࠲֓ཁ

  6. ɾϞʔλ੍ޚͷCݴޠιʔείʔυΛSimulinkϞσϧʹҠ২ͨ͠ࣄྫΛ ςʔϚʹ͢Δɻ ɾCݴޠͷ֤छจ๏ΛSimulinkϞσϧͱൺֱͯ͠આ໌͢Δɻ ͜Μͳਓʹ͓εεϝ̇ ɾCݴޠΛ͋Δఔ౓ཧղ͓ͯ͠ΓMATLAB, SimulinkͰϞσϧϕʔε։ൃΛ ֶश͍ͨ͠ͱߟ͍͑ͯΔਓɻ ɾबۀઌͰCݴޠιʔείʔυΛSimulinkϞσϧʹҠ২࡞ۀͷ୲౰ʹͳ Γͦ͏ͳਓɻ ɾCݴޠΛϞσϧͰͲ͏දݱ͢Δ͔ؾʹͳΔਓɻ

    ɾϞʔλ੍ޚͷϞσϧͱ͸Ͳ͏͍͏΋ͷ͔஌Γ͍ͨɺڵຯ͕͋Δਓɻ
  7. ࢀߟ৘ใ • ٕज़ॻɺϞσϧΛGitHubʹΞοϓϩʔυ͍ͯ͠·͢ɻ͝ڵຯ͋Δํ͸Ͳ͏ͧɻ ʲٕज़ॻʳٕज़ॻయ9 αʔΫϧ໊ɿk-abe ɹຊͷ໊শɿEVΧʔτͰ࢝ΊΔϞσϧϕʔε։ൃ https://techbookfest.org/product/6581675934875648? productVariantID=5815321967460352 ʲGitHubʳ SimulinkϞσϧ൛ɿ

    ɹhttps://github.com/grace2riku/EVKartArduinoSimulink.git Cݴޠ൛ɿ ɹhttps://github.com/grace2riku/EVKartArduinoIDE.git
  8. ࠓ೔ɺ঺հ͢Δ͜ ͱ͸࣍ͷຊʹ͢΂ͯ ॻ͍ͯ͋Γ·͢ɻ

  9. None
  10. Ϟʔλ੍ޚ֓ཁ

  11. Ϟʔλ੍ޚ֓ཁ •CQ EVΧʔτɹΠϯόʔλج൘Λ࢖༻ɻ •Simulinkɺ Simulink Support Package for Arduino HardwareΛ࢖ͬͯϞʔλ੍ޚϞσϧΛ࡞ͬͨɻ

    •CPUΛʮArduino MEGAʯʹมߋɻ •Ϟʔλ੍ޚ͸γϯϓϧͳɺ ɹʮ120౓ۣܗ೾௨ిɾϗʔϧηϯα༗Γʯɻ
  12. ϒϩοΫਤ

  13. ϋʔυ΢ΣΞϒϩοΫਤɹ఺ઢ࿮಺͕มߋ఺

  14. ϋʔυ΢ΣΞͷࣸਅ

  15. ։ൃ؀ڥ

  16. ։ൃ؀ڥ

  17. ▪࢖༻ιϑτɿ •Simulink (MATLAB R2019b) •Simulink Support Package for Arduino Hardware

    19.2.3 ▪ϥΠηϯε ݸਓ༻్MATLAB Home
  18. Ϟʔλ੍ޚλΠϛϯάνϟʔτ

  19. Ͳ͏͢Ε͹Ϟʔλ͸ճΔ͔?

  20. ɹɹCݴޠϞʔλ੍ޚϓϩάϥϜɹ֓ཁઆ໌ ▪expireTimerɿ ɾ10msִؒͰ࣮ߦɻεϩοτϧ։౓Λऔಘɻ ɹεϩοτϧ։͍ͨΒԼهؔ਺Λݺͼग़͠ɻ ▪setFETDrivePatternɿ ɾϗʔϧηϯαಡΈɺ௨ిύλʔϯઃఆɻ ɾϞʔλఀࢭ㱺ۦಈ࣌ɺϗʔϧηϯα Τοδ੾ΓସΘΓͰ࣮ߦɻ

  21. ᶃ ᶃεϩοτϧ։౓ΛADม׵͠औ ಘ͢Δɻ ᶄ௨ిύλʔϯΛઃఆ͢Δɻ ᶄ

  22. ᶃ ᶃϗʔϧηϯαಡΈग़͠ɻ ᶄ௨ిύλʔϯઃఆɻ ᶄ

  23. Ϟʔλճసಈը

  24. CݴޠɾSimulinkϞσϧ ͷهड़ൺֱ

  25. ࢖༻ͨ͠CݴޠɾSimulinkͷจ๏ No ࢖༻༻్ Cݴޠ SimulinkϒϩοΫ໊ 1 ػೳͷڽूɾ֊૚Խ ؔ਺ Subsystem 2

    γϑτ γϑτԋࢉࢠ << Bit Shift 3 ϗʔϧηϯαͷύλʔϯઃఆ (0bit໨ɿU, 1bit໨ɿV, 2bit໨ɿW) ORԋࢉࢠ | Add 4 ϗʔϧηϯαύλʔϯ͔Β௨ిεςʔδΛऔಘ ྫ) ϗʔϧηϯαU=1, V=0, W=1ͷ৔߹ɺ௨ిεςʔ δ͸1 ഑ྻ Index Vector 5 ֤௨ిεςʔδ͔Β௨ిύλʔϯʹ৔߹෼͚ switch Switch Case 6 ֤ػೳ͕ڞ௨Ͱࢀর͢Δσʔλ άϩʔόϧม਺ Datastore Memory, DataStore Write, DataStore Memory 7 ͋ΔػೳϞδϡʔϧͰલճ஋Λ࢖͏ ؔ਺಺෦Ͱstaticม਺Λએݴ Unit Delay 8 Simulinkͷಛ௃తػೳ ৴߸ͷόεԽ - Bus Creator,merge,Bus Selector 9 Simulinkͷಛ௃తػೳ Ϟχλ - DisplayɺScope
  26. No ࢖༻༻్ Cݴޠ SimulinkϒϩοΫ໊ 1 ػೳͷڽूɾ֊૚Խ ؔ਺ Subsystem 2 γϑτ

    γϑτԋࢉࢠ << Bit Shift 3 ϗʔϧηϯαͷύλʔϯઃఆ (0bit໨ɿU, 1bit໨ɿV, 2bit໨ɿW) ORԋࢉࢠ | Add 4 ϗʔϧηϯαύλʔϯ͔Β௨ిεςʔδΛऔಘ ྫ) ϗʔϧηϯαU=1, V=0, W=1ͷ৔߹ɺ௨ిεςʔ δ͸1 ഑ྻ Index Vector 5 ֤௨ిεςʔδ͔Β௨ిύλʔϯʹ৔߹෼͚ switch Switch Case 6 ֤ػೳ͕ڞ௨Ͱࢀর͢Δσʔλ άϩʔόϧม਺ Datastore Memory, DataStore Write, DataStore Memory 7 ͋ΔػೳϞδϡʔϧͰલճ஋Λ࢖͏ ؔ਺಺෦Ͱstaticม਺Λએݴ Unit Delay 8 Simulinkͷಛ௃తػೳ ৴߸ͷόεԽ - Bus Creator,merge,Bus Selector 9 Simulinkͷಛ௃తػೳ Ϟχλ - DisplayɺScope
  27. Cݴޠ

  28. Simulink

  29. Simulink

  30. No ࢖༻༻్ Cݴޠ SimulinkϒϩοΫ໊ 1 ػೳͷڽूɾ֊૚Խ ؔ਺ Subsystem 2 γϑτ

    γϑτԋࢉࢠ << Bit Shift 3 ϗʔϧηϯαͷύλʔϯઃఆ (0bit໨ɿU, 1bit໨ɿV, 2bit໨ɿW) ORԋࢉࢠ | Add 4 ϗʔϧηϯαύλʔϯ͔Β௨ిεςʔδΛऔಘ ྫ) ϗʔϧηϯαU=1, V=0, W=1ͷ৔߹ɺ௨ిεςʔ δ͸1 ഑ྻ Index Vector 5 ֤௨ిεςʔδ͔Β௨ిύλʔϯʹ৔߹෼͚ switch Switch Case 6 ֤ػೳ͕ڞ௨Ͱࢀর͢Δσʔλ άϩʔόϧม਺ Datastore Memory, DataStore Write, DataStore Memory 7 ͋ΔػೳϞδϡʔϧͰલճ஋Λ࢖͏ ؔ਺಺෦Ͱstaticม਺Λએݴ Unit Delay 8 Simulinkͷಛ௃తػೳ ৴߸ͷόεԽ - Bus Creator,merge,Bus Selector 9 Simulinkͷಛ௃తػೳ Ϟχλ - DisplayɺScope
  31. Cݴޠ

  32. Simulink

  33. No ࢖༻༻్ Cݴޠ SimulinkϒϩοΫ໊ 1 ػೳͷڽूɾ֊૚Խ ؔ਺ Subsystem 2 γϑτ

    γϑτԋࢉࢠ << Bit Shift 3 ϗʔϧηϯαͷύλʔϯઃఆ (0bit໨ɿU, 1bit໨ɿV, 2bit໨ɿW) ORԋࢉࢠ | Add 4 ϗʔϧηϯαύλʔϯ͔Β௨ిεςʔδΛऔಘ ྫ) ϗʔϧηϯαU=1, V=0, W=1ͷ৔߹ɺ௨ిεςʔ δ͸1 ഑ྻ Index Vector 5 ֤௨ిεςʔδ͔Β௨ిύλʔϯʹ৔߹෼͚ switch Switch Case 6 ֤ػೳ͕ڞ௨Ͱࢀর͢Δσʔλ άϩʔόϧม਺ Datastore Memory, DataStore Write, DataStore Memory 7 ͋ΔػೳϞδϡʔϧͰલճ஋Λ࢖͏ ؔ਺಺෦Ͱstaticม਺Λએݴ Unit Delay 8 Simulinkͷಛ௃తػೳ ৴߸ͷόεԽ - Bus Creator,merge,Bus Selector 9 Simulinkͷಛ௃తػೳ Ϟχλ - DisplayɺScope
  34. Cݴޠ

  35. Simulink

  36. No ࢖༻༻్ Cݴޠ SimulinkϒϩοΫ໊ 1 ػೳͷڽूɾ֊૚Խ ؔ਺ Subsystem 2 γϑτ

    γϑτԋࢉࢠ << Bit Shift 3 ϗʔϧηϯαͷύλʔϯઃఆ (0bit໨ɿU, 1bit໨ɿV, 2bit໨ɿW) ORԋࢉࢠ | Add 4 ϗʔϧηϯαύλʔϯ͔Β௨ిεςʔδΛऔಘ ྫ) ϗʔϧηϯαU=1, V=0, W=1ͷ৔߹ɺ௨ిεςʔ δ͸1 ഑ྻ Index Vector 5 ֤௨ిεςʔδ͔Β௨ిύλʔϯʹ৔߹෼͚ switch Switch Case 6 ֤ػೳ͕ڞ௨Ͱࢀর͢Δσʔλ άϩʔόϧม਺ Datastore Memory, DataStore Write, DataStore Memory 7 ͋ΔػೳϞδϡʔϧͰલճ஋Λ࢖͏ ؔ਺಺෦Ͱstaticม਺Λએݴ Unit Delay 8 Simulinkͷಛ௃తػೳ ৴߸ͷόεԽ - Bus Creator,merge,Bus Selector 9 Simulinkͷಛ௃తػೳ Ϟχλ - DisplayɺScope
  37. Simulink

  38. No ࢖༻༻్ Cݴޠ SimulinkϒϩοΫ໊ 1 ػೳͷڽूɾ֊૚Խ ؔ਺ Subsystem 2 γϑτ

    γϑτԋࢉࢠ << Bit Shift 3 ϗʔϧηϯαͷύλʔϯઃఆ (0bit໨ɿU, 1bit໨ɿV, 2bit໨ɿW) ORԋࢉࢠ | Add 4 ϗʔϧηϯαύλʔϯ͔Β௨ిεςʔδΛऔಘ ྫ) ϗʔϧηϯαU=1, V=0, W=1ͷ৔߹ɺ௨ిεςʔ δ͸1 ഑ྻ Index Vector 5 ֤௨ిεςʔδ͔Β௨ిύλʔϯʹ৔߹෼͚ switch Switch Case 6 ֤ػೳ͕ڞ௨Ͱࢀর͢Δσʔλ άϩʔόϧม਺ Datastore Memory, DataStore Write, DataStore Memory 7 ͋ΔػೳϞδϡʔϧͰલճ஋Λ࢖͏ ؔ਺಺෦Ͱstaticม਺Λએݴ Unit Delay 8 Simulinkͷಛ௃తػೳ ৴߸ͷόεԽ - Bus Creator,merge,Bus Selector 9 Simulinkͷಛ௃తػೳ Ϟχλ - DisplayɺScope
  39. Cݴޠ

  40. Simulink

  41. Simulink

  42. No ࢖༻༻్ Cݴޠ SimulinkϒϩοΫ໊ 1 ػೳͷڽूɾ֊૚Խ ؔ਺ Subsystem 2 γϑτ

    γϑτԋࢉࢠ << Bit Shift 3 ϗʔϧηϯαͷύλʔϯઃఆ (0bit໨ɿU, 1bit໨ɿV, 2bit໨ɿW) ORԋࢉࢠ | Add 4 ϗʔϧηϯαύλʔϯ͔Β௨ిεςʔδΛऔಘ ྫ) ϗʔϧηϯαU=1, V=0, W=1ͷ৔߹ɺ௨ిεςʔ δ͸1 ഑ྻ Index Vector 5 ֤௨ిεςʔδ͔Β௨ిύλʔϯʹ৔߹෼͚ switch Switch Case 6 ֤ػೳ͕ڞ௨Ͱࢀর͢Δσʔλ άϩʔόϧม਺ Datastore Memory, DataStore Write, DataStore Memory 7 ͋ΔػೳϞδϡʔϧͰલճ஋Λ࢖͏ ؔ਺಺෦Ͱstaticม਺Λએݴ Unit Delay 8 Simulinkͷಛ௃తػೳ ৴߸ͷόεԽ - Bus Creator,merge,Bus Selector 9 Simulinkͷಛ௃తػೳ Ϟχλ - DisplayɺScope
  43. Cݴޠ

  44. Simulink

  45. Simulink

  46. No ࢖༻༻్ Cݴޠ SimulinkϒϩοΫ໊ 1 ػೳͷڽूɾ֊૚Խ ؔ਺ Subsystem 2 γϑτ

    γϑτԋࢉࢠ << Bit Shift 3 ϗʔϧηϯαͷύλʔϯઃఆ (0bit໨ɿU, 1bit໨ɿV, 2bit໨ɿW) ORԋࢉࢠ | Add 4 ϗʔϧηϯαύλʔϯ͔Β௨ిεςʔδΛऔಘ ྫ) ϗʔϧηϯαU=1, V=0, W=1ͷ৔߹ɺ௨ిεςʔ δ͸1 ഑ྻ Index Vector 5 ֤௨ిεςʔδ͔Β௨ిύλʔϯʹ৔߹෼͚ switch Switch Case 6 ֤ػೳ͕ڞ௨Ͱࢀর͢Δσʔλ άϩʔόϧม਺ Datastore Memory, DataStore Write, DataStore Memory 7 ͋ΔػೳϞδϡʔϧͰલճ஋Λ࢖͏ ؔ਺಺෦Ͱstaticม਺Λએݴ Unit Delay 8 Simulinkͷಛ௃తػೳ ৴߸ͷόεԽ - Bus Creator,merge,Bus Selector 9 Simulinkͷಛ௃తػೳ Ϟχλ - DisplayɺScope
  47. Cݴޠ

  48. Simulink

  49. No ࢖༻༻్ Cݴޠ SimulinkϒϩοΫ໊ 1 ػೳͷڽूɾ֊૚Խ ؔ਺ Subsystem 2 γϑτ

    γϑτԋࢉࢠ << Bit Shift 3 ϗʔϧηϯαͷύλʔϯઃఆ (0bit໨ɿU, 1bit໨ɿV, 2bit໨ɿW) ORԋࢉࢠ | Add 4 ϗʔϧηϯαύλʔϯ͔Β௨ిεςʔδΛऔಘ ྫ) ϗʔϧηϯαU=1, V=0, W=1ͷ৔߹ɺ௨ిεςʔ δ͸1 ഑ྻ Index Vector 5 ֤௨ిεςʔδ͔Β௨ిύλʔϯʹ৔߹෼͚ switch Switch Case 6 ֤ػೳ͕ڞ௨Ͱࢀর͢Δσʔλ άϩʔόϧม਺ Datastore Memory, DataStore Write, DataStore Memory 7 ͋ΔػೳϞδϡʔϧͰલճ஋Λ࢖͏ ؔ਺಺෦Ͱstaticม਺Λએݴ Unit Delay 8 Simulinkͷಛ௃తػೳ ৴߸ͷόεԽ - Bus Creator,merge,Bus Selector 9 Simulinkͷಛ௃తػೳ Ϟχλ - DisplayɺScope
  50. Simulink

  51. Simulink

  52. Simulink

  53. Simulink

  54. No ࢖༻༻్ Cݴޠ SimulinkϒϩοΫ໊ 1 ػೳͷڽूɾ֊૚Խ ؔ਺ Subsystem 2 γϑτ

    γϑτԋࢉࢠ << Bit Shift 3 ϗʔϧηϯαͷύλʔϯઃఆ (0bit໨ɿU, 1bit໨ɿV, 2bit໨ɿW) ORԋࢉࢠ | Add 4 ϗʔϧηϯαύλʔϯ͔Β௨ిεςʔδΛऔಘ ྫ) ϗʔϧηϯαU=1, V=0, W=1ͷ৔߹ɺ௨ిεςʔ δ͸1 ഑ྻ Index Vector 5 ֤௨ిεςʔδ͔Β௨ిύλʔϯʹ৔߹෼͚ switch Switch Case 6 ֤ػೳ͕ڞ௨Ͱࢀর͢Δσʔλ άϩʔόϧม਺ Datastore Memory, DataStore Write, DataStore Memory 7 ͋ΔػೳϞδϡʔϧͰલճ஋Λ࢖͏ ؔ਺಺෦Ͱstaticม਺Λએݴ Unit Delay 8 Simulinkͷಛ௃తػೳ ৴߸ͷόεԽ - Bus Creator,merge,Bus Selector 9 Simulinkͷಛ௃తػೳ Ϟχλ - DisplayɺScope
  55. Simulink

  56. Simulink

  57. Simulink

  58. ࢀߟ৘ใ • ٕज़ॻɺϞσϧΛGitHubʹΞοϓϩʔυ͍ͯ͠·͢ɻ͝ڵຯ͋Δํ͸Ͳ͏ͧɻ ʲٕज़ॻʳٕज़ॻయ9 αʔΫϧ໊ɿk-abe ɹຊͷ໊শɿEVΧʔτͰ࢝ΊΔϞσϧϕʔε։ൃ https://techbookfest.org/product/6581675934875648? productVariantID=5815321967460352 ʲGitHubʳ SimulinkϞσϧ൛ɿ

    ɹhttps://github.com/grace2riku/EVKartArduinoSimulink.git Cݴޠ൛ɿ ɹhttps://github.com/grace2riku/EVKartArduinoIDE.git
  59. Have a good model-based development life !!!

  60. ͝ਗ਼ௌ͋Γ͕ͱ͏ ͍͟͝·ͨ͠