avatar_495

go-swissdrive , что внутри .

Автор 495, 14 Янв. 2016 в 19:53

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

495

25.12.2018
зазор статор - ротор - 1,1мм;
Геометрические размеры статора :
ширина шляпки зуба по прямой(не по дуге) - 7,5мм;
зазор между шляпками соседних зубьев - 4,5мм;
Геометрические размеры ротора :
зазор между магнитами - 1,5мм;
В результате такой геометрии момент создают только половина из 9 катушек трёх фаз . Возможно следующим шагом проекта был переход на мостовое включение каждой фазы , но что-то пошло не по плану . Теоретически потери могут упасть на 20% ,реально получить 10% .

Попробовал померить сколько потерь на вихревые токи можно убрать двухканальным ШИМом . В статике мерял момент и ток от источника напряжения . Получил не очень корректный результат , так как пользовался методом тыка . На частоте ШИМ 100 кГц и моменте 15% номинального , потери на вихревые токи как минимум 10% (%  от % ) . На меньших частотах КПД ниже  . Силовая часть была от стабилизатора напряжения процессора Р4 , напряжение 12 вольт . Индуктивности оставил родные , конденсатор - 8 штук по 2.2 мкФ керамика на 50 вольт . На картинке не реальная схема , а иллюстрация идеи .


По моим прикидкам данный ДД мотор кушает на 20% больше нормы , из которых 15% реально вернуть .

Abos

А чем Вам не нравится соотношение катушек/магнитов? В Вашем случае оно идеальное (45/40).

grale

Подскажите, как запустить данный мотор.

495

#3
 Простейший способ :
1 Разобрать
2 вынуть всю электронику
3 вывести 3 провода по 2 квадратных миллиметра
4 Купить безсенсорный контроллер на 25 ампер номинальных , могу ошибаться с цифрой 25 . По вольтам считайте сами у родного контроллера в 28" колесе при 36 вольтах скорость Х.Х. между 45 и 50 км/ч . Реальная скорость будет как минимум процентов на 10 меньше . Нужен sensorless контроллер для ДД мотора на 500 ватт .
Не тривиальный способ :
Разобраться с протоколом обмена между мотором и батареей . Канал из мотора точно совместим с COM портом . Канал из батарейки может быть полуаналоговый . Инициатор обмена батарея .
У меня батареи не было поэтому я этого даже не пытался сделать . Прошивку я уже стёр .

Есть разные модификации мотора , я писал о самой лёгкой . На сайте  http://www.go-swissdrive.com/das-go-swissdrive-system/motor/ есть вес всех моделей . Тяжёлые модели больше 500 ватт .

В разделе было несколько тем про установку датчиков Холла . Это тоже возможно , причем в двух вариантах :
1 Как в обычном двигателе .
2 К магнитам энкодера . Стоящие в плате Холлы использовать не удастся , они аналоговые и стоят под 90 градусов . Придётся делать специальную плату .

495

У этого двигателя есть одна особенность - крышка с датчиком угла+момента имеет 2 подшипника , поэтому двигатель без второй крышки может работать без радиальной нагрузки на холостом ходу . В этом виде хорошо видно положение ротора и статора . Статор по железу 9 фаз , по 3 зуба на фазу .
Я вывел провод от центра звезды и запитал одну фазу стабильным током 2 ампера . Померял максимальный момент весами , получил 1 кг . Потом тем же током запитал две фазы в звезде , как делает контроллер . Померял максимальный момент весами , получил 1,6 кг . Значит из 6 зубов момент дают максимум 5 , а в среднем за оборот 4.5 если учитывать переключения фаз . Как использовать этот эффект я не знаю и обнаружился он при попытке померять статический момент от тока фазы . До 20 ампер момент линейно зависит от тока , дальше мерять боюсь .

EPO

Всем привет, что мне удалось найти по прошивке в сети
Список инструкций , сервисные программы и прошивки акк и мотора, так же видео инструкции
http://www.simplon.com/login/downloads/downloads/

Прошивка мотора видео  https://vk.com/video42599119_456239037?list=a96698f67312877175
Утилита прошивки мотора  https://yadi.sk/d/qDUgXdZ0rDaJ5
Драйвер кабеля https://yadi.sk/d/B45Dm3d-rDaH6
Сервисная программа  https://yadi.sk/d/GMQ3u_CsrDaJS
Прошивка батареи 1.47 https://vk.com/doc42599119_437468819?hash=4f3da75ac1820af21a&dl=ff2ce5a92532fccb9d

https://vk.com/topic-88657301_33696168

Непонятна распиновка кабеля для прошивки


Утилита прошивки Go swiss drive






Перевод из мануала по прошивке батареи и мотора

Симплон батареи и обновление двигателя
Файлы и соответствующие видео-уроки по www.simplon.com
1. Обновление батареи с помощью инструмента Service
Требуемые файлы : Service Tool 1.64 , FW1.47.hex
1.1 Подготовка обновления
Во-первых, сохранить все файлы в готовом виде на слегка
обнаружимого место ( например, Desktop ) на вашем компьютере .Теперь подключите кабель USB диагностический к компьютеру .
Не имеет значения , в каком положении тумблер находится
,
 Теперь вам потребуется последняя версия 1.64 инструмента обслуживания . Они будут устанавливаться пользователем
запустите файл Servicetool.exe . Уже установленные предыдущие версии автоматически
перезаписаны .
1.2 Выполните обновление
Пожалуйста, убедитесь , что пустой аккумулятор во время обновления может вызвать проблемы.
 батарея должна быть предварительно установлена ​​в Deep Sleep для обновления .
Для этого нажимайте кнопку на батарее в течение приблизительно 10 секунд до 2-х светодиодных огней .
Затем он должен быть разбужен на короткое время повторным нажатием кнопки .Этот процесс очищает память данных и гарантирует безошибочное обновление.
 Теперь вы можете подключить батарею к лобной связи с кабелем обновления
( Не работает на стороне ) и перезапустить инструмент службы .
инфицирован  Если нет ключа не является Fehlermedung , что они могут игнорировать . Теперь нажмите построить в разделе «Firmware Update " в правом нижнем углу подключения .
 Индикатор состояния должен быть зеленого цвета и отображения текущей версии FW ( z.B.1.36 ) .
• в 2-ой строке наклейке на батарее обратно вы можете найти тип батареи ( NCR или РКУ ) .Пожалуйста, выберите соответствующий "параметра набор" в выпадающем меню (рис.1).
 Теперь у них есть кнопка " ... " и выберите , чтобы ввести путь прошивки ( FW1.47.hex ) , чтобы
которые они это сохраненные ранее (см 1.1 , возможно, рабочий стол ) .
 Сидит кабеля стабильным? Затем они начинают обновление сейчас на "Начать программирование "
Важно,что это не прерывается во время обновления !
 Обновление может занять несколько минут .
 Нажатие раз программы он запрашивает кнопку сейчас .
 После успешного обновления соединение автоматически прекращается ( с сообщением ) после того, как
подтвердили с помощью "OK" . Успешное обновление версии вы также можете использовать беспроводное соединение , зачитав
" Версия прошивки " управления .
; • проверка версии при повторном подключении возможно только после перезапуска сервисного инструмента .
Рис. 1 обновление прошивки , аккумулятор подключенным
SIMPLON BIKE GMBH │ │ Верхняя Achdamm 22 A- 6971 Hard │ Тел.: +43 ( 0 ) 5574/72 564 0 │ E-mail : service@simplon.com 2
обновление 2.Motor
Необходимые файлы : MotorUpdate.exe , KabelTreiber.exe (для Win7 )
2.1 Ручная установка USB кабеля двигателя
Как правило, ваш компьютер должен автоматически определить кабель используется и соответствующие порты
назначить для дальнейшего использования .В то время как компьютеры с Windows XP или старше, как правило, автоматически
обнаружены, Windows 7 необходим специальный драйвер . Это они могут сделать,
К " KabelTreiber.exe " Легко установить на компьютерах Windows. После установки,
это потребуется перезагрузка компьютера .
 Для того, чтобы прочитать порт, используемый иличтобы определить другой они идут в
Быстрый запуск - > Панель управления - > Диспетчер устройств ( Win7 : Система -> Диспетчер устройств)
 Здесь вы можете найти список всех устройств , которые используются в качестве USB Serial Port .



495

#6
Цитата: EPO от 11 Май 2016 в 07:40

Непонятна распиновка кабеля для прошивки



Я сделал BSL кабель под микроконтроллер и прошивал утилитой для микроконтроллеров ( у меня мотор используется для эксперементов над ним ).
На скрине из видео разъём датчиков Холла в энкодере . Разъём под JTAG\BSL у меня не был впаян . На видео в первом посте время 0.35 этот разъём выглядит как два горизонтальных ряда по 4 отверстия . Возможно используется хитрый разъём , которому достаточно металлизированных отверстий .
Попробую посмотреть ваши ссылки , может чего получится , но у меня мотор без батареи .
Могу написать распиновку разъёма на плате .
Левая нога в ряду ближайшем к центру имеет рядом с собой цифру 1 , чтоб не ошибиться прозвоните  ногу на землю и не торопитесь .
1 TDO                                                         2 GND(0 вольт)
3 TDI + BSL приёмник через 1 килоОм  4 TMS
5 TCK                                                           6 RST+ 1 килоОм к 3.6 вольт
7 BSL передатчик                                       8 Avcc (3.6 вольт)


P.S. Посмотрел видео . Прошивка модифицируется через COM порт . Можно использовать USB - COM взяв сигнал TTL и ограничив уровень сигналов до 3.6 вольт , похожее решение в прилагаемом файле .
Трёхножечный разъём .
1 GND
2 RX + 1 килоОм к 3.6 вольт
3 TX
RX это вход у микропроцессора ,TX это выход у микропроцессора . Уровни сигналов 3.6 вольт CMOS .

Кабель похож на кабель для старых телефонов . Нужно только не перепутать вход / выход и разобраться с уровнями сигналов . Мне кажется в схеме не хватает одного резистора 100 Om и стабилитроны нужны на 3.2 вольта .
  Дополнение , для не электриков :
Подклчать кабель можно только после соединения земли двигателя с землёй компьютера , вообще некоторые простые на вид действия лучше выполнять квалифицированным людям , потому как электроника явно не делалась в расчёте на "чайника" .

Alexander

Мотор за 4000?  Ого да вы видимо сторговали Пятихат ) Сегодня они уже по 4500..  А мне вот было оч интересно куда ушло столько моторов.
Я вот тоже купил себе такой мотор. И хочу из него собрать Безсенторный мотор с питанием от 60в с термодатчиком и с управлением от  Контроллера Ku 63.
У меня есть такоей контроллер на 14а 48в, и мне нужен ваш совет уважаемые знатоки. Если я вот в этой схеме http://www.avdweb.nl/solar-bike/electronics/ku63-motor-controller.html   поменяю все кондеры на 63в по входу этого будет достаточно?  Схема от похожего контроллера на 36. Ключи установлены по даташиту на 70 в

495

Цитата: Alexander от 22 Июнь 2016 в 01:35
Мотор за 4000
Мотор за 4000?  Ого да вы видимо сторговали Пятихат ) Сегодня они уже по 4500..  А мне вот было оч интересно куда ушло столько моторов.
Я вот тоже купил себе такой мотор. И хочу из него собрать Безсенторный мотор с питанием от 60в с термодатчиком и с управлением от  Контроллера Ku 63.
У меня есть такоей контроллер на 14а 48в, и мне нужен ваш совет уважаемые знатоки. Если я вот в этой схеме http://www.avdweb.nl/solar-bike/electronics/ku63-motor-controller.html   поменяю все кондеры на 63в по входу этого будет достаточно?  Схема от похожего контроллера на 36. Ключи установлены по даташиту на 70 в
1 они велосипедисты с веломании .
2 у них было 30 штук моторов на 25 км/ч  .
3  25 км/ч это программное ограничение , сам двигатель на 45 км/ч от 36 вольт ( я пишу о своём моторе ) . Судя по написаному на веломании мотор начинал заряжать батарею через диоды транзисторов при скорости за 50 км/ч .  Похоже больше 48 вольт в 28 колесе уже " не в коня корм " .
4 Датчики тока в родном контроллере на 100 ампер , то есть выдают +/- 50 ампер фазных ( евростандарты 250 ватт реализованы программно ) . Провода вроде на 30 ампер номинальных , но в двигателях не всё однозначно .
5 Постарайтесь не сломать при разборке электронику и энкодер . В этом моторе есть все железо для реализации Чупиной мечты о настраиваемых таймингах для Холлов . Может кто и напишет приблуду которая из двух сигналов энкодера делает три сигнала Холлов , при это внося временные поправки в зависимости от оборотов . В этом энкодере похоже есть даже индексная метка (один импульс на оборот) , но она совмещена с датчиком момента .


Alexander

А где там энкодер?  Мне не нужна электронная начинка.  я хотел бы исспользовать только обмотку и магниты, так как у меня не хватает ни знаний ни времени разбираться с эл начинкой. А зачем настраивать тайминги датчиков хола? Функции опережения и замедления уже релизованы в контроллерах типа инфиниона или мини е. Подскажите по схеме контроллера, я ограничусь лишь заменой кондеров что бы повесить этот контроллер на 60в:?

Alexander

Электроника цела и лежит на полочке могу отдать так как она мне не нужна.

Alexander

Цитата: 495 от 24 Июнь 2016 в 20:07
Цитата: Alexander от 24 Июнь 2016 в 19:14
ок спасибо за помощь.
Пожалуста .
Отпишитесь в теме о результатах , если не лениво .

Так вот. Контроллер в итоге взял не на 14 а на 19 а.. такой же . Поменял кондеры все что были на 63в на 100 в и поменял резюк на побольше который стоит по питанию питания микрух )



Два дня покатал немного все работает.. покачто.... Ток не мерил пока нечем... А мотор этот так я и не приладил и за дэбильного крепления.. побоялся что провернется на 60вольтах  при мощьности в 1квт хотя бы. В оригинале этот мотор держит с одной стороны толстый усилитель дропаута а с другой прижимает эксцентрик.. А так как в него много не вкачивается то этого крепления хватает.. Вообще моторы которые крепятся на зажимной эксцентрик полный отстой. 

EPO

Короче извлекли из мотора контроллер и подключили фазы к Китайскому Инфиниону и ручке газа, завели мотор ура ! Закрепили мотор в тисках, приладили родной датчик скорости и покрутили на 500w режиме до упора, мотор выдал 70 км\ч , ясен перец без нагрузки + погрешность, но результат порадовал , мотор остался тихим , хотя инфинион не является синусным , уровень шума остался на прежнем уровне, то есть как не жужжал так и жужжит. 
PS У кого на Алиэкспресс купить инфинион ? Если кто знает , дайте пожалуйста ссылку , можно и не инфинион, но что-бы также сам определял фазы итд .. Человек с которым проводили эксперименты , не хочет выходить на связь .

vovchok

А если просто подать на питающие мотор провода напряжение с батареи - без управляющих сигналов с компа не заведется? У меня мотор BullsGreenMover250w - немцы пишут, что управляющий компьютер, что на руле подходит к нему от GoSwissdrive, значит внутри что-то похожее (сам не разбирал и не понятно как его разбирать - снаружи никаких болтов, стягивающих цельные половинки движка, нету). Между аккумом и движком у меня два силовых и два сигнальных провода, и на сигнальные в параллель посажен компьютер (которого нет в наличии). Также по этим силовым проводам из движка выходит сгенерированное напряжение для освещения (написано 6V5W, хотя я намерил больше в разы при кручении), фара подключена через какой-то керамический кондер с надписью "xx x110 xhfe" (или то не кондер вовсе, но выглядит так)...

495

#14
Цитата: vovchok от 24 Нояб. 2016 в 12:09
А если просто подать на питающие мотор провода напряжение с батареи - без управляющих сигналов с компа не заведется?
Где то в ссылках была история про то как продавец на Авито убедил покупателя , что мотор работает с не подключённым входом управления . Похоже продавец переехал в Германию и продолжил свою деятельность . :laugh:

Тема про BullsGreenMover250w
http://escooter.org.ua/forum/4-2298-1

495

#15
07.01.2017
Не большое дополнение по электронике ( о прошивке речь не идёт ).
Электроника сделана как можно проще . Все входы ( кроме интерфейса с внешним миром ) на АЦП . Выходы на феты с таймера
;--------  ADC12  --------------
;external
; ADC0    SIN
; ADC1    COS
; ADC2-61 current sensor rd_1
; ADC3-2 current sensor or_2
; ADC4-3 IN 68k/4.7k
; ADC5    MOMENT
; ADC6-5 empty 130k/9.1k
; ADC7   not used
;Uref used for ADC
; ADC8,9-10,11 Ubat 68k/4.7k
;internal
; ADC10-Rt
; ADC11...15-Avcc/2

P4.1-37   Порт 4 бит 1 нога 37
;--------  Port P4 out 3 faz --------
;          Li              Hi
; rd_1 P4.1-37 P4.4-40
; or_2 P4.3-39 P4.6-42
; bk_3 P4.2-38 P4.5-41  not current sensor

ADC4 Входной сигнал , кроме АЦП идёт на компаратор ( 24 нога ), что даёт возможность использовать ШИМ управление .
ADC6 Возможно второй входной сигнал , в моём случае он не был впаян .
Электроника может работать от 15 вольт минимум .  В моём случае 5s лифера .
Первый тест  мигает  светодиодом на разъёме  для COM порта .
любителям исходников

; msp430F247 16 Mhz  32K Flash 4kB RAM
;0x0200-0x09FF RAM 2KB   (mirrored at 0x1100-0x18FF)
;0x0C00-0x0FFF BSL ROM mem
;0x1000-0x10FF info Flash mem
;0x1100-0x20FF RAM 4KB
;//0x1100-0x18FF RAM 2KB mirrored 0x0200-0x09FF
;//0x1900-0x20FF RAM 2KB
;0x8000-0xFFFF main Flash mem

;************************************************************
; STATUS REGISTER BITS
GIE        .equ         0008h
OSCOFF     .equ         0020h
SCG0       .equ         0040h   ; 1 DCO off
SCG1       .equ         0080h   ; 1 SMCLK off

;************************************************************
; SPECIAL FUNCTION REGISTER ADDRESSES + CONTROL BITS

IE1     .equ           0000h
OFIE      .equ          02h
IFG1     .equ          0002h
OFIFG     .equ          02h

;************************************************************
; Basic Clock Module

BCSCTL1     .equ       0057h    ;/* Basic Clock System Control 1 */
XTS         .equ        40h   ;/* LFXTCLK 0:Low Freq. / 1: High Freq. */
XT2OFF      .equ        80h   ;/* Enable XT2CLK */

BCSCTL2     .equ       0058h    ;/* Basic Clock System Control 2 */
SELS        .equ       08H   ;/* MCLK Source Select 0:DCOCLK / 1:XT2CLK/LFXTCLK */
SELM0      .equ        40h   ;/* MCLK Source Select 2: XT2CLK/LFXTCLK */
SELM1      .equ        80h   ;/* MCLK Source Select 2: XT2CLK/LFXTCLK */


;************************************************************
; WATCHDOG TIMER

WDTCTL   .equ      120h                 ;watchdog control register address
WDTPW    .equ      5A00h                ;password for watchdog access
WDTHOLD  .equ      80h                   ;bit position for watchdog reset

;************************************************************
; Ports

P3OUT     .equ         19h  ;/* Port 3 Output */
P3DIR     .equ         1Ah  ;/* Port 3 Direction */

P4IN      .equ         1Ch  ;/* Port 4 Output */
P4OUT     .equ         1Dh  ;/* Port 4 Output */
P4DIR     .equ         1Eh  ;/* Port 4 Direction */
P4SEL     .equ         1Fh  ;/* Port 4 timer_B Module Enable */

;************************************************************

RAMSTART .equ      200h                 ;RAM start address
RAMSIZE  .equ      0800h                ;size of RAM (excluding stack)

;-------------------------------------------------------------------------------
              .sect "Init", 08000h         ; Progam Start (32KB Flash device) 
START         mov.w   #09FFh,SP            ; Set stackpointer ( 2kB RAM device )
;-------- Init WDT subsustem --------------
StopWDT       mov.w   #WDTPW+WDTHOLD,&WDTCTL  ; Stop watchdog timer
      BIC #GIE,SR          ; Mask Interrupt off

;-------- Init ADC12  --------------
;external
; ADC0   SIN
; ADC1   COS
; ADC2-61 current sensor rd_1
; ADC3-2 current sensor or_2
; ADC4-3 IN 68k/4.7k
; ADC5   MOMENT
; ADC6-5 empty 130k/9.1k
; ADC7   not used
;Uref used for ADC
; ADC8,9-10,11 Ubat 68k/4.7k
;internal
; ADC10-Rt
; ADC11...15-Avcc/2

;-------- Init Port P3.5-33 out led --------
      bis.b   #020h,&P3DIR            ; Set P3.5 to output direction
      bis.b   #020h,&P3OUT            ; Set P3.5-33 3pin_COM-2 (GND-1)
;      xor.b   #020h,&P3OUT            ; Toggle P3.5 LED on\off 
;      bic.b   #020h,&P3OUT            ; Clear P3.5-33 3pin_COM-2 (GND-1)

;-------- Init Port P4 out 3 faz --------
;       Li   Hi
; rd_1 P4.1-37 P4.4-40
; or_2 P4.3-39 P4.6-42
; bk_3 P4.2-38 P4.5-41  not current sensor
;      mov.b   #000h,&P4OUT              ; Set   P4
;      mov.b   #0FFh,&P4DIR            ; Set P4 to output direction
;      xor.b   #0ffh,&P4OUT            ;  on\off 

;-------- End Init ----------------------------------------------------------------
      bic.b   #020h,&P3OUT            ; Clear P3.5-33 3pin_COM-2 (GND-1)
;-------- End Init ----------------------------------------------------------------

;**** Main Loop      ******************************************************************

Loop      
      xor.b   #020h,&P3OUT            ; Toggle P3.5 LED on\off 
      mov.w   #03FFFh,R15             ; Delay to R15
L1      dec.w   R15                     ; Decrement R15
      jnz     L1                      ; Delay over?
            jmp          Loop            ;never ending loop
      nop                           
                nop                           

;-----Interrupt Vector Addresses------------------------------------------------
         .sect "Int_Vect", 0FFE0h    
         .word      0FFFFh       ;P0IFG.27
         .word      0FFFFh      ;BTIFG
         .word      0FFFFh            
         .word      0FFFFh            
         .word      0FFFFh            
         .word      0FFFFh      ;ADCIFG
         .word      0FFFFh            
         .word      0FFFFh         
         .word      0FFFFh         
         .word      0FFFFh            
         .word      0FFFFh      ;WDTIFG
         .word      0FFFFh         
         .word      0FFFFh      ;P0IFG.1
         .word      0FFFFh      ;P0IFG.0
         .word      START      ;RSTI/OFIFG/ACCVIFG
         .word      START      ;PUC/reset/WDTIFG

На этом  "изучение опыта предидущих поколений " можно считать законченным . :drink:

16.02.2017
ЭДС одной фазы имеет форму ближе к треугольнику  чем к синусоиде . Примерно половина периода прямая наклонная линия , только вершины полукруглые . Когда  ток между фазой и центром звезды , примерно 90 градусов из 360 момент отсутствует . Похоже двигателисты получили ТЗ с токовой трапецией  и минимизировали колебания момента . Микроконтроллер под блочный режим , если сожгу родной       
https://www.chipdip.ru/product/msp430g2553in20
Из прошлогодних тестов переключение на внешний резонатор и прерывание по сбою резонатора . Для ПИД регулятора "кварцованное время" необходимо , а для стабилизатора тока фазы хватает внутреннего генератора .
 осторожно ассемблер

;*******************************************************************************
; msp430F149 8 Mhz

; asm430 led.asm -l
; rem lnk430 led.obj -o led.out
; rem rom430 -txiw led.obj(led.out) led.txt led1.txt
; rom430 -x led.obj led.txt

; R0
; R1
; R2
; R3

; R10
; R11
; R12
; R13
; R14
; R15 wait--count cycle -- wait

;*******************************************************************************

;************************************************************
;* STATUS REGISTER BITS
;************************************************************

;#define C                   0x0001
;#define Z                   0x0002
;#define N                   0x0004
;#define V                   0x0100
;#define GIE                 0x0008
;#define CPUOFF              0x0010
;#define OSCOFF              0x0020
;#define SCG0                0x0040
;#define SCG1                0x0080

GIE        .equ         0008h
OSCOFF     .equ         0020h
SCG0       .equ         0040h   ; 1 DCO off
SCG1       .equ         0080h   ; 1 SMCLK off

;************************************************************
;* SPECIAL FUNCTION REGISTER ADDRESSES + CONTROL BITS
;************************************************************

;#define IE1_                0x0000  /* Interrupt Enable 1 */
;sfrb    IE1               = IE1_;
;#define WDTIE               0x01
;#define OFIE                0x02
;#define NMIIE               0x10
;#define ACCVIE              0x20
;#define URXIE0              0x40
;#define UTXIE0              0x80

;#define IFG1_               0x0002  /* Interrupt Flag 1 */
;sfrb    IFG1              = IFG1_;
;#define WDTIFG              0x01
;#define OFIFG               0x02
;#define NMIIFG              0x10
;#define URXIFG0             0x40
;#define UTXIFG0             0x80

;#define ME1_                0x0004  /* Module Enable 1 */
;sfrb    ME1               = ME1_;
;#define URXE0               0x40
;#define USPIE0              0x40
;#define UTXE0               0x80

;#define IE2_                0x0001  /* Interrupt Enable 2 */
;sfrb    IE2               = IE2_;
;#define URXIE1              0x10
;#define UTXIE1              0x20

;#define IFG2_               0x0003  /* Interrupt Flag 2 */
;sfrb    IFG2              = IFG2_;
;#define URXIFG1             0x10
;#define UTXIFG1             0x20

;#define ME2_                0x0005  /* Module Enable 2 */
;sfrb    ME2               = ME2_;
;#define URXE1               0x10
;#define USPIE1              0x10
;#define UTXE1               0x20

IE1     .equ           0000h
OFIE      .equ          02h
IFG1     .equ          0002h
OFIFG     .equ          02h

;************************************************************
;* Basic Clock Module
;************************************************************

;#define DCOCTL_             0x0056  /* DCO Clock Frequency Control */
;sfrb    DCOCTL            = DCOCTL_;
;#define BCSCTL1_            0x0057  /* Basic Clock System Control 1 */
;sfrb    BCSCTL1           = BCSCTL1_;
;#define BCSCTL2_            0x0058  /* Basic Clock System Control 2 */
;sfrb    BCSCTL2           = BCSCTL2_;

;#define MOD0                0x01   /* Modulation Bit 0 */
;#define MOD1                0x02   /* Modulation Bit 1 */
;#define MOD2                0x04   /* Modulation Bit 2 */
;#define MOD3                0x08   /* Modulation Bit 3 */
;#define MOD4                0x10   /* Modulation Bit 4 */
;#define DCO0                0x20   /* DCO Select Bit 0 */
;#define DCO1                0x40   /* DCO Select Bit 1 */
;#define DCO2                0x80   /* DCO Select Bit 2 */

;#define RSEL0               0x01   /* Resistor Select Bit 0 */
;#define RSEL1               0x02   /* Resistor Select Bit 1 */
;#define RSEL2               0x04   /* Resistor Select Bit 2 */
;#define XT5V                0x08   /* XT5V should always be reset */
;#define DIVA0               0x10   /* ACLK Divider 0 */
;#define DIVA1               0x20   /* ACLK Divider 1 */
;#define XTS                 0x40   /* LFXTCLK 0:Low Freq. / 1: High Freq. */
;#define XT2OFF              0x80   /* Enable XT2CLK */

;#define DIVA_0              0x00   /* ACLK Divider 0: /1 */
;#define DIVA_1              0x10   /* ACLK Divider 1: /2 */
;#define DIVA_2              0x20   /* ACLK Divider 2: /4 */
;#define DIVA_3              0x30   /* ACLK Divider 3: /8 */

;#define DCOR                0x01   /* Enable External Resistor : 1 */
;#define DIVS0               0x02   /* SMCLK Divider 0 */
;#define DIVS1               0x04   /* SMCLK Divider 1 */
;#define SELS                0x08   /* MCLK Source Select 0:DCOCLK / 1:XT2CLK/LFXTCLK */
;#define DIVM0               0x10   /* MCLK Divider 0 */
;#define DIVM1               0x20   /* MCLK Divider 1 */
;#define SELM0               0x40   /* SMCLK Source Select 0 */
;#define SELM1               0x80   /* SMCLK Source Select 1 */

;#define DIVS_0              0x00   /* SMCLK Divider 0: /1 */
;#define DIVS_1              0x02   /* SMCLK Divider 1: /2 */
;#define DIVS_2              0x04   /* SMCLK Divider 2: /4 */
;#define DIVS_3              0x06   /* SMCLK Divider 3: /8 */

;#define DIVM_0              0x00   /* MCLK Divider 0: /1 */
;#define DIVM_1              0x10   /* MCLK Divider 1: /2 */
;#define DIVM_2              0x20   /* MCLK Divider 2: /4 */
;#define DIVM_3              0x30   /* MCLK Divider 3: /8 */

;#define SELM_0              0x00   /* SMCLK Source Select 0: DCOCLK */
;#define SELM_1              0x40   /* SMCLK Source Select 1: DCOCLK */
;#define SELM_2              0x80   /* SMCLK Source Select 2: XT2CLK/LFXTCLK */
;#define SELM_3              0xC0   /* SMCLK Source Select 3: LFXTCLK */

BCSCTL1     .equ       0057h    ;/* Basic Clock System Control 1 */
XTS         .equ        40h   ;/* LFXTCLK 0:Low Freq. / 1: High Freq. */
XT2OFF      .equ        80h   ;/* Enable XT2CLK */

BCSCTL2     .equ       0058h    ;/* Basic Clock System Control 2 */
SELS        .equ       08H   /* MCLK Source Select 0:DCOCLK / 1:XT2CLK/LFXTCLK */
SELM0      .equ        40h   ;/* MCLK Source Select 2: XT2CLK/LFXTCLK */
SELM1      .equ        80h   ;/* MCLK Source Select 2: XT2CLK/LFXTCLK */


;************************************************************
;* WATCHDOG TIMER
;************************************************************/

;#define WDTCTL              0x0120  /* Watchdog Timer Control */
;#define WDTHOLD             0x0080
;#define WDTPW               0x5A00
WDTCTL   .equ      120h                 ;watchdog control register address
WDTPW    .equ      5A00h                ;password for watchdog access
WDTHOLD  .equ      80h                   ;bit position for watchdog reset

;#define P1OUT              0x0021  /* Port 1 Output */
;#define P1DIR              0x0022  /* Port 1 Direction */
P1OUT     .equ         21h  ;/* Port 1 Output */
P1DIR     .equ         22h  ;/* Port 1 Direction */



;_______________________________________________________________________________
;-------------------------------------------------------------------------------
RAMSTART .equ      200h                 ;RAM start address
RAMSIZE  .equ      0F0h                 ;size of RAM (excluding stack)
INITVAL  .equ      0h                   ;RAM initialization value

;-------------------------------------------------------------------------------
              .sect "RAMInit", 01000h     ; Progam Start (60K Flash device 149) 
START       mov.w   #0280h,SP               ; Set stackpointer (128B RAM device)
StopWDT     mov.w   #WDTPW+WDTHOLD,&WDTCTL  ; Stop watchdog timer
      BIC #GIE,SR ;  ; Mask Interrupt off

      bis.b   #001h,&P1DIR            ; Set P1.0 to output direction
      bis.b   #001h,&P1OUT                  ; Set   P1.0
;              bic.b   #001h,&P1OUT                  ; Clear P1.0
;-------- Init COM port  !!!

;-------- Init CLK subsustem --------------
;    Select XT2  for MCLK
      BIs #OSCOFF,SR ;  1 Switch on the LFXTCLK
;      BIS #SCG1,SR ;   Switch off the SMCLK
      BIC.B #XT2OFF,&BCSCTL1 ; Enable XT2CLK

L3       BIC.B #OFIFG,&IFG1 ; 2 Clear the OFIFG flag
      MOV #07FFFh,R15 ;  3 Wait at least 50 ?s
L2      DEC R15 ;
      JNZ L2 ;
; Tx warning code to UART !!!
      xor.b   #001h,&P1OUT             ; Toggle P1.0
      BIT.B #OFIFG,&IFG1 ; 4 Test OFIFG, and repeat steps 2-4 until OFIFG remains cleared.
      JNZ L3 ; Repeat test if needed

      BIS.B #OFIE,&IE1 ;   enable NMI for OSC

      BIS.B #SELM1,&BCSCTL2 ; MCLK Source Select 2: XT2CLK/LFXTCLK
      BIC.B #SELM0,&BCSCTL2 ; MCLK Source Select 2: XT2CLK/LFXTCLK
      BIS.B #SELS,&BCSCTL2 ; SMCLK Source Select 2: XT2CLK/LFXTCLK

;-------- Init ADC12  --------------



;-------- Init Timer_B --------------




;**** Main Loop:

Loop      nop
      xor.b   #001h,&P1OUT             ; Toggle P1.0
      mov.w   #03FFFh,R15             ; Delay to R15
L1      dec.w   R15                     ; Decrement R15
      jnz     L1                      ; Delay over?
            jmp          Loop         ;never ending loop
                                           
;---- Interrupt Service Routine for NMI ----------------------------------------
         .sect "NMIInt", 0FA00h
NMIInt      nop
;            reti                         ;NOT return from interrupt
; test source of NMI
; STOP all out ( LPM3 ? )
; Tx error code to UART
; LED on\off
        bis.b   #001h,&P1DIR            ; Set P1.0 to output direction
Errloop     xor.b   #001h,&P1OUT             ; Toggle P1.0
Wait        mov.w   #0FFFFh,R15             ; Delay to R15
L0          dec.w   R15                     ; Decrement R15
            jnz     L0                      ; Delay over?
            jmp     Errloop                 ; Again
; write to flash err code
; jmp START ?
END         nop                             ;

;-----Interrupt Vector Addresses------------------------------------------------
         .sect "Int_Vect", 0FFE0h;PUC/reset address
         .word      START      ;P0IFG.27
         .word      START      ;BTIFG
         .word      START            
         .word      START            
         .word      START            
         .word      START      ;ADCIFG
         .word      START            
         .word      START            
         .word      START            
         .word      START            
         .word      START      ;WDTIFG
         .word      START         
         .word      START      ;P0IFG.1
         .word      START      ;P0IFG.0
         .word      NMIInt      ;RSTI/OFIFG/ACCVIFG
         .word      START      ;PUC/WDTIFG


20.03.2017
Печатная плата многослойная , +36вольт и GND разведены во внутренних слоях . Про форсаж по напряжению можно забыть , вдруг 50 вольт предел для платы .

26.04.2017
Когда тема уходит на вторую страницу , тему можно использовать как лог-файл .
В посте я предложил использовать компаратор для борьбы с токами обратного направления , которые возникают от противоЭДС .
https://electrotransport.ru/index.php?topic=36849.msg902321#msg902321
Если отойти от ортодоксальной догмы по имени ШИМ и впасть в ересь по имени ЧИМ ( частотно импульсная модуляция ) , то можно сделать стабилизатор тока на компараторе .
Идея состоит в том , что вместо закрытия нижнего транзистора нужно выйти из цикла ожидания конца цикла и перейти к открытию верхнего транзистора . Изменяя опорное напряжение можно менять ток . Мёртвую зону между открытыми транзисторами лучше не забывать .
Частота от 4 до 60 кГц , импульс тока накачки 6 микросекунд . Мёртвая зона меньше 1 микросекунды . Средний ток фазы получился 37 ампер ( по напряжению на постоянно открытом нижнем полевике ) , больше не даёт блок питания , уходит в защиту . Напряжение 15 вольт .
Резисторы к затворам верхних полевиков 5 Ом , к нижним 2 Ом , конденсаторов нет . Паралельно нижнему полевику поставил диод Шотки на 20 ампер , микросекундные импульсы в 100 ампер он нормально переносит . По привычке на питание полумоста припаял керамический конденсатор на 2.2 микроФарада . Многослойная плата - это хорошо , но для силовых цепей на 50 ампер нужны уже навесные шины питания . На фазные провода повесил ферритовые трубки от кабелей к мониторам .
 ЧИМ стабилизатор тока

; msp430F247 16 Mhz  32K Flash 4kB RAM
;0x0200-0x09FF RAM 2KB   (mirrored at 0x1100-0x18FF)
;0x0C00-0x0FFF BSL ROM mem
;0x1000-0x10FF info Flash mem
;0x1100-0x20FF RAM 4KB
;0x8000-0xFFFF main Flash mem
;asm430 lc.asm -l
;rom430 -x lc.obj lc.txt
;ti lc.txt
;bsldemo2.exe -cCOM1 -m1 +epvrw z.txt
;************************************************************
; STATUS REGISTER BITS
GIE        .equ         0008h
OSCOFF     .equ         0020h
SCG0       .equ         0040h   ; 1 DCO off
SCG1       .equ         0080h   ; 1 SMCLK off

; SPECIAL FUNCTION REGISTER ADDRESSES + CONTROL BITS
IE1     .equ           0000h
OFIE      .equ          02h
IFG1     .equ          0002h
OFIFG     .equ          02h

; Basic Clock Module
BCSCTL1     .equ       0057h    ;/* Basic Clock System Control 1 */
XTS         .equ        40h   ;/* LFXTCLK 0:Low Freq. / 1: High Freq. */
XT2OFF      .equ        80h   ;/* Enable XT2CLK */

BCSCTL2     .equ       0058h    ;/* Basic Clock System Control 2 */
SELS        .equ       08H   ;/* MCLK Source Select 0:DCOCLK / 1:XT2CLK/LFXTCLK */
SELM0      .equ        40h   ;/* MCLK Source Select 2: XT2CLK/LFXTCLK */
SELM1      .equ        80h   ;/* MCLK Source Select 2: XT2CLK/LFXTCLK */

; WATCHDOG TIMER
WDTCTL   .equ      120h                 ;watchdog control register address
WDTPW    .equ      5A00h                ;password for watchdog access
WDTHOLD  .equ      80h                   ;bit position for watchdog reset

; Ports
P2SEL     .equ         02Eh  ; Port  Comparator+ input

P3OUT     .equ         19h  ;/* Port 3 Output */
P3DIR     .equ         1Ah  ;/* Port 3 Direction */

P4IN      .equ         1Ch  ;/* Port 4 Output */
P4OUT     .equ         1Dh  ;/* Port 4 Output */
P4DIR     .equ         1Eh  ;/* Port 4 Direction */
P4SEL     .equ         1Fh  ;/* Port 4 timer_B Module Enable */

P6SEL     .equ         37h  ; Port 6 ADC12 Module Enable

;Comparator_A+ Registers
CACTL1    .equ    059h      ;078h
CACTL2    .equ    05Ah      ;00Ch  bit0 output
CAPD    .equ    05Bh      ;01Fh

RAMSTART .equ      200h                 ;RAM start address
RAMSIZE  .equ      0800h                ;size of RAM (excluding stack)

;************************************************************
;-------------------------------------------------------------------------------
; R4   work
; R5
; R6
; R7
; R8
; R9
; R10
; R11
; R12
; R13   L_fet + pause
; R14   H_fet + pause
; R15   Delay

DeedTime .macro
      mov.w   #000Ah,R15             ; Delay to R15     
DeedTime .ENDM

              .sect "Init", 08000h         ; Progam Start (32KB Flash device) 
START         mov.w   #09FFh,SP            ; Set stackpointer (2kB RAM device)
;-------- Init WDT  --------------
StopWDT       mov.w   #WDTPW+WDTHOLD,&WDTCTL  ; Stop watchdog timer
; WDT 64 mkc
;-------- Init Interrupt  --------------
      BIC #GIE,SR          ; Interrupt off
;-------- Init CLK -------------- Switch to XT2 16 Mhz
;    Select XT2  for MCLK
      BIs #OSCOFF,SR       ; 1 Switch on the LFXTCLK
;      BIS #SCG1,SR       ;  Switch off the SMCLK
      BIC.B #XT2OFF,&BCSCTL1    ;  Enable XT2CLK

L9       BIC.B #OFIFG,&IFG1    ; 2 Clear the OFIFG flag
      MOV #07FFFh,R15    ; 3 Wait at least 50 ?s
L8      DEC R15       ;
      JNZ L8          ;
; Tx warning code to UART !!!
      xor.b   #020h,&P3OUT             ; Toggle P3.5
      BIT.B #OFIFG,&IFG1    ; 4 Test OFIFG ,
      JNZ L9       ;and repeat steps 2-4 until OFIFG remains cleared.

      BIS.B #OFIE,&IE1    ;   enable NMI for OSC

      BIS.B #SELM1,&BCSCTL2    ; MCLK Source Select 2: XT2CLK/LFXTCLK
      BIC.B #SELM0,&BCSCTL2    ; MCLK Source Select 2: XT2CLK/LFXTCLK
      BIS.B #SELS,&BCSCTL2    ; SMCLK Source Select 2: XT2CLK/LFXTCLK

;-------- Init ADC12  --------------
;external
; ADC0     SIN
; ADC1     COS
; ADC2-61 current sensor rd_1
; ADC3-2  current sensor or_2
; ADC4-3  IN 68k/4.7k
; ADC5     Tork
; ADC6-5  empty 130k/9.1k
; ADC7    not used
;internal
;Uref used for ADC
; ADC8,9-10,11 Ubat 68k/4.7k
; ADC8,9-10,11 Ubat 68k/4.7k
; ADC10        Rt
; ADC11...15   Avcc/2
      BIS.B #0FFh,&P6SEL    ;  Port 6 ADC12 input
;-------- Init Comparator_A+ --------------
;P2.0/ACLK/CA2-20 U_ref
;P2.4/CA1/TA2 -24  current in FET  , 1N4007 kd522b*2 1kOm
      BIS.B #01Fh,&P6SEL    ;  Port 2 Comparator_A+ input CA0..CA4
      mov.b   #01Fh,&CAPD              ; 
      mov.b   #008h,&CACTL1             ;
      mov.b   #04Ch,&CACTL2             ;bit0 output

;-------- Init SVS  --------------
;-------- Init Port P4 out 3 faz Init Timer_B --------
;       Li   Hi
; rd_1 P4.1-37 P4.4-40
; bk_3 P4.2-38 P4.5-41  not current sensor
; or_2 P4.3-39 P4.6-42
      mov.b   #000h,&P4OUT              ; Set 0   P4
      mov.b   #0FFh,&P4DIR            ; Set P4 to output direction
;014h 004h 006h 004h rd_1  1404h 0604h
;018h 008h 00Ah 008h       1808h 0A08h
;022h 002h 006h 002h bk_3  2202h 0602h
;028h 008h 00Ch 008h       2808h 0C08h
;042h 002h 00Ah 002h or_2  4202h 0A02h
;044h 004h 00Ch 004h       4404h 0C04h
;-------- End Init ----------------------------------------------------------------

;**** Main  **************************************************************
; to C Hi power
      mov.b   #002h,&P4OUT              ; Set 1 for P4.1-37
      mov.w   #00FFh,R15             ; Delay to R15
L5      dec.w   R15                     ; Decrement R15   1 tic
      jnz     L5                      ; Delay over?   2 tic
; or_2 Li = 1 P4.3-39
      mov.b   #008h,&P4OUT              ; Set 0 P4.2-38 , 1 P4.3-39
      mov.w   #000Fh,R15             ; Delay to R15
L6      dec.w   R15                     ; Decrement R15
      jnz     L6                      ; Delay over?

      mov.w   #01808h,R14             ; H_fet + pause
           swpb   R14
      mov.w   #00A08h,R13             ; L_fet + pause
           swpb   R13

Loop      
      mov.b   R14,&P4OUT              ; Set 1 P4.4-40 , 1 P4.3-39
      mov.w   #0001Ch,R15             ; Delay to R15 020h = 6 mkc + 4 tic
L1      dec.w   R15                     ; Decrement R15
      jnz     L1                      ; Delay over?

      mov.b   #008h,&P4OUT              ; Set 0 P4.4-40 , 1 P4.3-39
      mov.w   #0002h,R15                ; Delay to R15     09h = 2 mkc , 04h = 1 mkc
L2      dec.w   R15                     ; Decrement R15
      jnz     L2                      ; Delay over?

      mov.b   R13,&P4OUT              ; Set 1 P4.1-37 , 1 P4.3-39
      mov.w   #01FFh,R15                ; Delay to R15   0F0h = 48 mkc + 4 tic
L3      mov.b   &CACTL2,R4             ; bit0 output Comparator_A+
        and   #00001h,R4       ; if bit0==1 then continue
      jnz   L11         ; else exit
      mov.w   #00001h,R15             ; Delay to R15  1 tic to exit
      nop
L11      dec.w   R15                     ; Decrement R15
      jnz     L3                      ; Delay over?

      mov.b   #008h,&P4OUT              ; Set 0 P4.1-37 , 1 P4.3-39
      mov.w   #002h,R15               ; Delay to R15    09h = 2 mkc
L4      dec.w   R15                     ; Decrement R15
      jnz     L4                      ; Delay over?

            jmp          Loop            ; never ending loop                     

;---- Interrupt Service Routine for NMI ------------------------------
         .sect "NMIInt", 0FA00h
NMIInt      nop
      mov.b   #000h,&P4OUT              ; Set 0 for P4
;            reti                         ;NOT return from interrupt
; test source of NMI
; STOP all out ( LPM3 ? )
; Tx error code to UART
; write to flash err code

Errloop     
      mov.w   #0FFFFh,R15             ; Delay to R15
L0             dec.w   R15                     ; Decrement R15
               jnz     L0                      ; Delay over?
               jmp     Errloop                 ; Again
; jmp START ?
END            nop                             ;

;-----Interrupt Vector Addresses--------------------------------------------
      .sect "Int_Vect", 0FFE0h    
      .word      0FFFFh       ;P0IFG.27
      .word      0FFFFh      ;BTIFG
      .word      0FFFFh            
      .word      0FFFFh            
      .word      0FFFFh            
      .word      0FFFFh      ;ADCIFG
      .word      0FFFFh            
      .word      0FFFFh         
      .word      0FFFFh         
      .word      0FFFFh            
      .word      0FFFFh      ;WDTIFG
      .word      0FFFFh         
      .word      0FFFFh      ;P0IFG.1
      .word      0FFFFh      ;P0IFG.0
      .word      NMIInt      ;RSTI/OFIFG/ACCVIFG
      .word      START      ;PUC/reset/WDTIFG
Пока я не сжёг ни одного транзистора , ОС по току готова , переключение фаз не должно быть сложным , а определение положения ротора по напряжению трёх фаз и средней точки  звезды - это единственная часть задачи в которой я ничего не понимаю . Пока не понимаю .

22.06.2017
Стабилизатор  +12 вольт работает при +13 вольт на входе . До драйверов полевиков доходит +11.5 вольт на максимальной частоте переключения .
На средней точке звезды напряжение ( во время накачки тока  в обмотку ) не равно половине напряжения питания , колеблется в диапазоне 5 вольт при питании 25 вольт . Максимум/минимум колебаний находится рядом с точками переключения фаз . Алгоритм переключения получается инкрементный по одному сигналу с проверкой ЭДС и падения напряжения от фазного тока во время паузы . Для старта с места сойдёт . Описание определения положения ротора при старте http://www.avislab.com/blog/brushless06/ ,отличие в том что все ограничиваются тремя проводами , но для встроенного контроллера ограничивать количество проводов к двигателю не имеет смысла .

31.07.2014
Тестовая программка вращает двигатель по одному сигналу со средней точки . Работает неустойчиво . По изменению индуктивности можно вращать двигатель , но мне лениво писать прямое управление по скорости .
 lc07.txt

; ОС по уровню средней точки фиксированные уровни
; старт из 0-го положения , иначе срыв синхронизации

; STATUS REGISTER BITS
GIE        .equ         0008h
OSCOFF     .equ         0020h
SCG0       .equ         0040h   ; 1 DCO off
SCG1       .equ         0080h   ; 1 SMCLK off !!! to ADC

; SPECIAL FUNCTION REGISTER ADDRESSES + CONTROL BITS
IE1     .equ           0000h
OFIE    .equ          02h
IFG1    .equ          0002h
OFIFG   .equ          02h

; Basic Clock Module
BCSCTL1     .equ       0057h    ; Basic Clock System Control 1
XTS         .equ        40h      ; LFXTCLK 0:Low Freq. / 1: High Freq.
XT2OFF      .equ        80h      ; Enable XT2CLK

BCSCTL2     .equ       0058h    ; Basic Clock System Control 2
SELS        .equ       08H      ; MCLK Source 0:DCOCLK / 1:XT2CLK/LFXTCLK
SELM0      .equ        40h      ; MCLK Source 2: XT2CLK/LFXTCLK
SELM1      .equ        80h      ; MCLK Source 2: XT2CLK/LFXTCLK

; WATCHDOG TIMER
WDTCTL   .equ      120h           ;watchdog control register address
WDTPW    .equ      5A00h          ;password for watchdog access
WDTHOLD  .equ      80h            ;bit position for watchdog reset

; Ports
P2SEL     .equ         02Eh  ; Port  Comparator_A+ input

P3OUT     .equ         19h  ; Port 3 Output
P3DIR     .equ         1Ah  ; Port 3 Direction

P4IN      .equ         1Ch  ; Port 4 Output
P4OUT     .equ         1Dh  ; Port 4 Output
P4DIR     .equ         1Eh  ; Port 4 Direction
P4SEL     .equ         1Fh  ; Port 4 timer_B Module Enable

P6SEL     .equ         37h  ; Port 6 ADC12 Module Enable

;Comparator_A+ Registers
CACTL1    .equ    059h   ;008h
CAON    .equ    008h   ;Bit 3

CACTL2    .equ    05Ah      ;04Ch  bit0 output
CASHORT .equ   000h   ;Bit7 This bit shorts the + and - input terminals
;bit6+bit2       01-CA0 , 10-CA1 , 11-CA2
;bit5+bit4+bit3 001-CA1 ,010-CA2 ,011-CA3 ,100-CA4 ,101-CA5 ,110-CA6 ,111-CA7   
CAF   .equ   000h   ;Bit1 Comparator_A+ output filter

CAPD    .equ    05Bh      ;00Fh CA0 ... CA3

;ADC12 Registers
ADC12CTL0    .equ      01A0h  ; ADC12 Control0 
ADC12SC      .equ   00001h
ENC      .equ   00002h
;ADC12TOVIE          0x004
;ADC12OVIE           0x008
ADC12ON      .equ   00010h
;REFON               0x020
;REF2_5V             0x040
;MSH                 0x080
;MSC                 0x080
SHT1_3    .equ          03000h   ;32 tic adc_clk
;SHT0_2    .equ          00200h   ;16
SHT0_3    .equ          00300h   ;32
;SHT0_4    .equ          00400h   ;64

ADC12CTL1    .equ        01A2h    ; ADC12 Control1 
ADC12BUSY    .equ         00001h   ; out bit
CONSEQ_0         .equ   00000h   ; 0006h  1-used bit
ADC12SSEL_0     .equ    00000h   ; 0018h  1-used bit internal OSC
ADC12SSEL_3     .equ    00010h   ;  MCLK
ADC12DIV_2   .equ   00020h   ; 00E0h  1-used bit /2
ADC12DIV_3   .equ   00040h   ;  /3
ISSH           .equ     00100h   ; 0100h  1-used bit
SHP           .equ      00200h   ; 0200h  1-used bit
SHS_0         .equ      00000h   ; 0C00h  1-used bit
CSTARTADD_0    .equ     00000h   ; F000h  1-used bit 00h - ADC12MEM0

ADC12MEM0    .equ       0140h ; ADC12 Conversion Memory

ADC12MCTL0   .equ       0080h ; ADC12 Memory Control 0 
INCH_4     .equ   004h    ; 0000 1111 b 1-used bit A4
INCH_6     .equ   006h    ;  A6
SREF_0            .equ     000h   ; 0111 0000 b 1-used bit Vcc  Vss
;SREF_1            .equ     010h   ;  internal Uref+ Vss
SREF_2            .equ     020h   ;  ext Ueref+ Vss
;SREF_6            .equ     060h   ;  ext Ueref+ Uref-/Ueref-
EOS               .equ      080h   ; 1000 0000 b 1-used bit

RAMSTART .equ      1100h                ;RAM start , address 20h BSL
             
; R4   work?
; R5
; R6
; R7
; R8
; R9
; R10   ADC12MEM0
; R11   ??? &adresIdTab
; R12   &stepTab
; R13   L_fet +
; R14   H_fet + pause
; R15   Delay

;--- RAM allocation
          .bss     runoff,1,1120h  ;
          .bss     ADC00,16    ;
          .bss     numStep,2    ; 0000h const
        .bss     DelayStep,2    ;
          .bss     Step024,2    ; flag 024 or 135 step

;-------------------------------------------------------------------------------
              .sect "Init", 08000h      ; Progam Start (32KB Flash device) 
stepTab            ;08000h
        .word   01404h                  ;H_fet   rd_1 + pause bk_3
        .word   00006h                  ;L_fet   rd_1 +
        .word   01808h                    ;H_fet   rd_1 + pause or_2
        .word   0000Ah                  ;L_fet   rd_1 +
        .word   02808h                  ;H_fet   bk_3 + pause or_2
        .word   0000Ch                  ;L_fet   bk_3 +
        .word   02202h                  ;H_fet   bk_3 + pause rd_1
        .word   00006h                  ;L_fet   bk_3 +
        .word   04202h                    ;H_fet   or_2 + pause rd_1
        .word   0000Ah                  ;L_fet   or_2 +
   .word   04404h                    ;H_fet   or_2 + pause bk_3
        .word   0000Ch                  ;L_fet   or_2 +
stepTab_End         ;#08018h

START         mov.w   #20FFh,SP       ;Set stackpointer 4kB RAM , 09FFh 2kB RAM
; test WDT set ? if set FATAL error.
;-------- Init Port P4 out 3 faz Init Timer_B --------
;       Li   Hi
; rd_1 P4.1-37 P4.4-40
; bk_3 P4.2-38 P4.5-41  not current sensor
; or_2 P4.3-39 P4.6-42
      mov.b   #000h,&P4OUT              ; Set 0   P4
      mov.b   #0FFh,&P4DIR            ; Set P4 to output direction
;-------- Init WDT  --------------
StopWDT  mov.w   #WDTPW+WDTHOLD,&WDTCTL  ; Stop watchdog timer
;-------- Init Interrupt  --------------
   BIC #GIE,SR          ; Interrupt off
;-------- Init CLK -------------- Switch to XT2 16 Mhz
;    Select XT2  for MCLK
   BIs #OSCOFF,SR       ; 1 Switch on the LFXTCLK
   BIS #SCG1,SR       ;  Switch off the SMCLK   
   BIC.B #XT2OFF,&BCSCTL1    ;  Enable XT2CLK
L9    BIC.B #OFIFG,&IFG1    ; 2 Clear the OFIFG flag
   MOV #07FFFh,R15    ; 3 Wait at least 50 ?s
L8   DEC R15       ;
   JNZ L8          ;
; Tx warning code to UART !!!!!! End Less Loop
   BIT.B #OFIFG,&IFG1    ; 4 Test OFIFG ,
   JNZ L9       ;and repeat steps 2-4 until OFIFG remains cleared

   BIS.B #OFIE,&IE1    ;   enable NMI for OSC
   BIS.B #SELM1,&BCSCTL2    ; MCLK Source Select 2: XT2CLK/LFXTCLK
   BIC.B #SELM0,&BCSCTL2    ; MCLK Source Select 2: XT2CLK/LFXTCLK
   BIS.B #SELS,&BCSCTL2    ; SMCLK Source Select 2: XT2CLK/LFXTCLK

;-------- Init Port P3.5-33 out led --------
      bis.b   #070h,&P3DIR            ; Set P3.5 P3.4 P3.6 to output direction
      bis.b   #030h,&P3OUT            ; Set P3.5-33 P3.4-32 3pin_COM-2 (GND-1)
;      mov.b   #040h,&P3OUT       ; P3.6 synchro
;-------- Init SVS  --------------
;-------- Init Comparator_A+ --------------
;P2.0/ACLK/CA2-20 U_ref
;P2.4/CA1/TA2 -24  current in FET  , 1N4007 kd522b*2 1kOm
      BIS.B #00Fh,&P6SEL    ; Port 2 Comparator_A+ input CA0..CA3
      mov.b   #00Fh,&CAPD              ; 
      mov.b   #008h,&CACTL1             ;
      mov.b   #04Ch,&CACTL2             ;bit0 output
;-------- Init ADC12  --------------
; ADC0     SIN holl
; ADC1     COS holl
; ADC2-61 current sensor rd_1
; ADC3-2  current sensor or_2
; ADC4-3  IN 68k/4.7k
; ADC5     Tork holl
; ADC6-5  4.7k/330 middel point 3 faz
; ADC7    not used SVSin
; ADC8-10 Uref+ Ubat 68k/4.7k
; ADC9-11 Uref- Ubat 68k/4.7k
; ADC10        Rt
; ADC11...15   Avcc/2
      BIS.B #0FFh,&P6SEL    ;  Port 6 ADC12 input

   BIS.W #SHT1_3+SHT0_3+ADC12ON,ADC12CTL0      ;ADC12ON
   BIS.W #SHP+ADC12DIV_3+ADC12SSEL_3,ADC12CTL1    ;
   mov.b #EOS+SREF_0+INCH_4,ADC12MCTL0      ;
AD2   BIS.W #ENC+ADC12SC,ADC12CTL0   ;Sampling and conversion start
AD1     BIT.W   #00001h,&ADC12CTL1   ; ADC12BUSY ?
   jnz   AD1         ;  then continue else exit   
   cmp.w   #00180h,&ADC12MEM0   ; wait BSLprog ?
   jn     AD2                       ;                yes .
;-------- End Init --------------------------------------------------------------
;**** Main  **************************************************************
Main      BIC.W #ENC,ADC12CTL0   ;
      mov.b #EOS+SREF_2+INCH_6,ADC12MCTL0   ; change control
      BIS.W #ENC,ADC12CTL0   ;
; to C Hi power
      mov.b   #00Fh,&P4OUT              ; Set 1 for Li
      mov.w   #0008h,R15               ; Delay to R15
L5      dec.w   R15                     ; Decrement R15   1 tic
      jnz     L5                      ; Delay over?   2 tic
      mov.b   #000h,&P4OUT              ; Set 0
      mov.w   #00020h,R15               ; Delay to R15
L6      dec.w   R15                     ; Decrement R15
      jnz     L6                      ; Delay over?

; WDT init to 1 kHz  !!!
      mov.w   #0000h,Step024       ;flag 024 or 135 step 
      MOV.w    #stepTab,R12      ; adresStepTab = 0
L0      mov.b   #000h,&P4OUT              ; Set 0
      MOV.w     @R12+,R14      ; H_fet + pause
      MOV.w    @R12+,R13      ; L_fet +

      mov.w   #00020h,R15               ; Delay to R15
L06      dec.w   R15                     ; Decrement R15
      jnz     L06                      ; Delay over?
      mov.b   R14,&P4OUT              ; pause
      mov.w   #04000h,DelayStep       ; 

           swpb   R14
      mov.b   R14,&P4OUT              ; H_fet
           swpb   R14
      BIS.W   #ADC12SC,ADC12CTL0   ;Sampling and conversion start
L01        BIT.W   #00001h,&ADC12CTL1   ;if bit0=1 ADC12BUSY ?
      jnz   L01         ;  then continue else exit   
      BIS.W   #ADC12SC,ADC12CTL0   ;Sampling and conversion start
L07        BIT.W   #00001h,&ADC12CTL1   ;if bit0=1 ADC12BUSY ?
      jnz   L07         ;  then continue else exit   
      mov.b   R14,&P4OUT              ; pause
      mov.w   &ADC12MEM0,R4             
      mov.b   R13,&P4OUT              ; L_fet
      mov.w   #00400h,R15               ; step   
L08       dec.w   R15                     ; Decrement R15
      jnz     L08                      ; Delay over?
      mov.b   R14,&P4OUT              ; pause

L05      cmp.w   #08018h,R12      ; stepTab_End ?
      jnz    Loop                      ; not stepTab_End .
      MOV.w    #stepTab,R12      ; adresStepTab = 0

Loop           swpb   R14
      mov.b   R14,&P4OUT              ; H_fet
           swpb   R14
      BIS.W   #ADC12SC,ADC12CTL0   ;Sampling and conversion start
      dec.w   DelayStep               ; Decrement
L1        BIT.W   #00001h,&ADC12CTL1   ;if bit0=1 ADC12BUSY ?
      jnz   L1         ;  then continue else exit   
   ; test of next step 5v-3v-5v
      cmp.w   #00000h,Step024      ;
      jz        L11                     ;
      cmp.w   #00A50h,&ADC12MEM0   ; A68 AA8 green ?
      jn   L21                ; no
      mov.w   #00000h,DelayStep   ; yes Forward 0,8,10 Bak 4,C,14
      mov.w   #0000h,Step024       ; 
      mov.b   #020h,&P3OUT            ; Set P3.5 green
           jmp   L21      
L11      cmp.w   #005a0h,&ADC12MEM0   ; 5C0 5B0 5D0 red ?
      jc   L21                ; no
      mov.w   #00000h,DelayStep       ; yes Bak 4,C,14 Forward 0,8,10
      mov.w   #0001h,Step024       ; 
      mov.b   #010h,&P3OUT            ; Set  P3.4 red

    ; WDT reset !!!
L21      mov.b   R14,&P4OUT              ; pause
      mov.w   #00002h,R15               ; Delay to R15 05h = 1 mkc
L2      dec.w   R15                     ; Decrement R15
      jnz     L2                      ; Decrement R15

      mov.b   R13,&P4OUT              ; L_fet
      mov.w   #00200h,R15               ; Delay to R15 
L3        BIT.b   #001h,&CACTL2   ; if out Comparator_A+==1 then continue
; current OS off!!!      jz   L4         ;    else exit
      dec.w   R15                     ; Decrement R15
      jnz     L3                      ; Delay over?

L4      mov.b   R14,&P4OUT              ; pause
      cmp.w   #00000h,DelayStep   ;
      jz        L0                      ; next step
      jmp     Loop             ; never ending loop                     
;---- Interrupt Service Routine for NMI ------------------------------
         .sect "NMIInt", 0FA00h
NMIInt      nop
      mov.b   #000h,&P4OUT              ; Set 0 for P4
;            reti                         ;NOT return from interrupt
Errloop     
      mov.w   #0FFFFh,R15             ; Delay to R15
nmINT1             dec.w   R15                     ; Decrement R15
               jnz     nmINT1                      ; Delay over?
               jmp     Errloop                 ; Again
; jmp START ?
END            nop                             ;
Всё , больше букв в один пост не лезет . Переберусь в черновики до нового года .

495

#16
Пост на 2018 год .
Кейде внутри , мелочь развивается быстрее динозавров .
https://www.icloud.com/sharedalbum/ru-ru/#B15GgZLKuGZQkiW;11E4B7DC-A82C-4FAC-8996-7C6E88BCBDEC
12 фет и по шунту на фазу  . У кейде шунты 1 милиОм , если я правильно понял R001 . Железо 3 фазы , геометрия полюсных наконечников ни в какие учебники не лезет . Вот где оригинальная схемотехника , а не "нагуглил и допилил" .

Разводка вызвала несколько вопросов , на которые можно ответить только зная процесс эволюции проекта .
1 От полумоста до конденсаторов 25 мм . Возможно понадеялись на многослойность платы .
2 Между полумостами 60 миллиметров . Вероятно планировали не полумост , а fullbridge на фазу .
3 Самая большая загадка 9 фаз железо и 3 фазы медь . Вопрос можно сформулировать в двух видах : "зачем ?" или "как появилось ?" . Я подозреваю что без знаний об истории двигателестроения вопрос "зачем ?" не имеет смысла .

Я пытаюсь написать прошивку для себя , но мне нужен бабушковоз с ручкой газа которая в одну сторону газ , а в другую тормоз , в центре шарик с пружиной ( для езды среди пешеходов) .
Мне нужен момент на низких оборотах с хорошим КПД , поэтому я вношу изменения в электронику .
Больше 25 км/ч мне не надо .
При снятой батарее нужен тормоз . Вместо батареи "стабилитрон" на 36 вольт , 100 ампер .

По двигателю интересно попробовать поставить fullbridge на фазу , теоретически +20% КПД (процент от процента) практически не больше +10% КПД на частичных нагрузках .

DIVAS

Цитата: 495 от 02 Янв. 2018 в 14:13геометрия полюсных наконечников ни в какие учебники не лезет
А можно картинку? Интересно же...
Kugoo M4 Pro 18Ah (2020)