/* в десятичное значение + 48, образуя ASCII код */
hundreds_int = (count - thousands_int*1000)/100;
hundreds = (char)(hundreds_int + 48);
/*выбирает и преобразует следующую наибольшую значащую цифру */
/* в десятичное значение + 48, образуя ASCII код */
tens_int = (count - thousands_int*10 0 0 - hundreds_int*100)/10;
tens = (char)(hundreds_int + 48);
/*выбирает и преобразует следующую наибольшую значащую цифру */
/* в десятичное значение + 48, образуя ASCII код */
ones_int = (count-thousands_int*1000-hundreds_int*100-tens_int*10);
ones = (char)(ones_int + 48);
/*выводит результат на ЖКИ*/
putcommands(0x80); /*курсор ЖКИ переводится на строку 1, позицию 1*/
putchars(thousands);
putchars(hundreds);
putchars(tens);
putchars(ones);
}
/********************************************************************/
/********************************************************************/
7.4.3. Анализ
В предыдущем разделе мы рассказали, как измерить скорость вращения двигателя и отобразить ее в оборотах в минуту. В этом разделе мы замкнем контур обратной связи. Для этого мы сравним мгновенную скорость вращения с опорным значением, чтобы затем скорректировать коэффициент заполнения ШИМ и стабилизировать скорость вращения двигателя на желательном уровне при изменении нагрузки двигателя.
Стабилизируем скорость двигателя на уровне 1600 об/мин. Чтобы сделать это, мы должны определить требуемый коэффициент заполнения ШИМ для 1600 об/мин. Из полученного нами графика (рис. 7.17) мы видим, что для обеспечения скорости вращения приблизительно в 1600 об/мин, необходимо подать на двигатель напряжение в 8 В. При питании двигателя от источника в 12 В соответствующий коэффициент заполнения ШИМ составит 66.7 % (8 В/ 12 В).
Чтобы достичь коэффициента заполнения ШИМ в 66.7%, установим значение периода ШИМ на 256 единиц, а коэффициент заполнения ШИМ на 172 единицы.
Как мы уже указывали при предыдущем обсуждении системы ШИМ, эти значения устанавливаются в регистрах PWPER0 и PWDTY0, соответственно.
Мы используем сигнал управления ШИМ с частотой 976 Гц. Для этого частоту таймера ШИМ, равную 8 МГц, необходимо поделить на 32. При этом мы получим частоту в 250 кГц (период 4 мкс) и используем ее в качестве синхронизирующей для системы ШИМ. Поскольку мы используем период в 256 импульсов, частота управления ШИМ будет равна 976 Гц (период = 4 мкс/импульсx256 импульсов).
Ниже приведен исходный текст программы, позволяющей изменять коэффициент заполнения ШИМ, чтобы стабилизировать скорость на уровне 1600 об/мин.
Эта функция используется начальной установки скорости вращения двигателя.
/********************************************************************/
/*init_PWM: инициализация модуля ШИМ контроллера 68HC12 */
/********************************************************************/
void init_PWM {
PWTST = 0x00; /*Установить порт ШИМ в нормальный режим */
PWCTL = 0x00; /*установить режим фронтовой ШИМ */
PWCLK = 0x28; /*без объединения каналов, ECLK/128*/
PWPOL = 0x01; /*активный уровень 1 */
DDRP = 0xFF; /*Порт P конфигурировать как выходной */
PWEN = 0x01; /*установить выход ШИМ */
PWPER0 = 255; /*установить для ШИМ период, соответствующий 976 Гц */
PWDTY0 = 171; /*установить начальный коэффициент заполнения */
/* на отсутствие движения */
}
/********************************************************************/